powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Visual Studio: Компиляция из командной строки
3 сообщений из 3, страница 1 из 1
MS Visual Studio: Компиляция из командной строки
    #38314270
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Несколько вопросов по обозначенной теме:

1. Для начала хочу создать только объектный файл. Для этого вызываю команду:
Код: plaintext
cl /EHsc /Fo./obj/ ./sources/some_library.cpp
Результат
C:\bs\temp2>cl /EHsc /Fo./obj/ ./sources/some_library.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.51106.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

some_library.cpp
Microsoft (R) Incremental Linker Version 11.00.51106.1
Copyright (C) Microsoft Corporation. All rights reserved.

/out:some_library.exe
./obj/some_library.obj
LINK : fatal error LNK1561: entry point must be defined

Искомый obj файл я успешно получаю, однако согласно приведённому выше логу вижу, что cl.exe этим не ограничился и затем идёт попытка создания exe файла (чего я, собственно, не заказывал). Как должна выглядеть команда, чтобы всё ограничилось лишь созданием объектного файла?

2. Чтобы не вводить команды каждый раз вручную, я написал небольшой make файл, предварительно создав все необходимые подкаталоги и разместив в них соответствующие файлы:
makefile.mak
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
# makefile.mak
# © Andrey Bushman, 28/06/2013
# Создание тестовых библиотек some_library.lib и some_library.dll.
#---------------------------------------------------------------------
# создание obj файла (на его основе собираются файлы exe, lib и dll):
./obj/some_library.obj: ./source/some_library.cpp ./headers/some_library.h
	cl /EHsc /Fo./obj/ ./sources/some_library.cpp
#---------------------------------------------------------------------
# создание lib файла (код таких файлов будет внедряться в exe и dll):
./output/some_library.lib: ./obj/some_library.obj
	lib /OUT:./output/some_library.lib ./obj/some_library.obj
#---------------------------------------------------------------------
# создание dll файла (эта библиотека может совместно использоваться):
./output/some_library.dll: ./obj/some_library.obj
	link /DLL /OUT:./output/some_library.dll ./obj/some_library.obj
#---------------------------------------------------------------------

Как видим, мой make файл содержит три команды. Каждая из них корректно работает, если её запустить в консоли. Однако при попытке использования моего make файла в качестве параметра команды nmake я получаю сообщение об ошибке:
использование nmake
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
C:\bs\temp2>nmake @makefile.mak

Microsoft (R) Program Maintenance Utility Version 11.00.51106.1
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1065: invalid option 'H'
Stop.

Полагаю, что в моём make файле что-то сделано не так. Где ошибка?


Спасибо.

P.S. Предвосхищая вопросы вида, мол " а зачем тебе это нужно?: используй графический интерфейс проектов в MS VS... " отвечаю: мне интересно владеть и консольными инструментами (даже более интересно, чем графическими), тем более, что за кулисами именно они и выполняют всю основную работу.
...
Рейтинг: 0 / 0
MS Visual Studio: Компиляция из командной строки
    #38314276
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

1) -c

2) -f
...
Рейтинг: 0 / 0
MS Visual Studio: Компиляция из командной строки
    #38314293
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyCompositum,

1) -c

2) -f
Спасибо, :). Правда в первом случае должно было быть /c.
Поскольку make выполняет только первое задание, то файл подредактировал:
makefile.mak (исправленный)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
# makefile.mak
# © Andrey Bushman, 28/06/2013
# Создание тестовых библиотек some_library.lib и some_library.dll.
# На исполнение запускается только первое задание, поэтому в зависимо-
# стях последовательность выстроена так, чтобы выполнились все три.
#---------------------------------------------------------------------
# создание lib файла (код таких файлов будет внедряться в exe и dll):
./output/some_library.lib: ./output/some_library.dll
	lib /OUT:./output/some_library.lib ./obj/some_library.obj
#---------------------------------------------------------------------
# создание dll файла (эта библиотека может совместно использоваться):
./output/some_library.dll: ./obj/some_library.obj
	link /DLL /OUT:./output/some_library.dll ./obj/some_library.obj
#---------------------------------------------------------------------
# создание obj файла (на его основе собираются файлы exe, lib и dll):
./obj/some_library.obj:
	cl /c /EHsc /Fo./obj/ ./sources/some_library.cpp 
#---------------------------------------------------------------------

Теперь всё работает как и ожидалось, спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Visual Studio: Компиляция из командной строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]