Использовать NMAKE, чтобы сделать весь источник в каталоге? - PullRequest
1 голос
/ 09 мая 2009

Используя nmake, возможно ли, чтобы makefile автоматически собрал все файлы .cpp в текущем каталоге, не указывая их по отдельности?

Итак, вместо чего-то вроде:

O = $(OBJ_DIR)/main.obj
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj:
    ---COMPILE $< HERE---

Я бы не хотел указывать каждый объект для создания. Можно ли это сделать?

Ответы [ 5 ]

3 голосов
/ 09 мая 2009
.cpp.obj:
    $(CC) $(CFLAGS) $*.cpp

- это правило по умолчанию, которое автоматически разрешает зависимости .obj из файлов .cpp ...

0 голосов
/ 07 января 2011

Вы можете запустить команду оболочки во время предварительной обработки nmakefile, а затем !include выводить. Естественно, вывод должен быть в формате nmake. Что-то вроде:

!if [bash -c "echo O = *.cpp" >sources.mak]
!error Failed to generate source list
!endif
!include sources.mak

all: $(O:.cpp=.obj)

.cpp.obj:
    ---COMPILE $< HERE---

Я подозреваю, что большинство людей не использовали бы bash для создания sources.mak, но вы поняли идею.

0 голосов
/ 06 июня 2009

Одна из возможностей заключается в том, чтобы заключить марку в скрипт.

Либо используйте цикл for, вызывая make для каждого файла .cpp, либо создайте список файлов cpp и используйте его в качестве параметра для файла сборки.

0 голосов
/ 09 мая 2009

Вы можете использовать такое правило:

{src\mystuff}.c{tmp\src\mystuff}.obj::
    $(CC) /nologo $(CFLAGS) /c /Fotmp\src\mystuff\ $<

, который найдет и скомпилирует все файлы .c в src\mystuff и поместит объектные файлы в tmp\src\mystuff. Замените .cpp на .c в вашем случае.

Обратите внимание, что первый символ во второй строке должен быть символом табуляции, а не пробелами.

Кроме того, $(CC) предопределено nmake как cl, и вы можете добавить любые флаги компилятора, которые вам нужны, к $(CFLAGS), жестко закодировать их в правиле или добавить туда другую переменную, как вам нравится.

0 голосов
/ 09 мая 2009

Я думаю, что это можно сделать с помощью подстановочных знаков в GNU make (и IIRC вы можете запустить его в Windows). Кроме того, извините, но я не знаю nmake.

...