2009-12-17 4 views
3

Я использую nmake для компиляции нескольких исходных файлов в эльф. Однако я не хочу, чтобы указать .o файлов в длинном списке, как это:Nmake получает список всех файлов .o из файлов .cpp

OBJS = file1.o file2.o file3.o 

То, что я предпочел бы, чтобы это использовать маску, которая определяет все .o файлов в текущем каталоге в качестве зависимостей для .elf , Однако файлы .o не существуют, пока я не скомпилировал их из .cpp-файлов. Есть ли способ получить список файлов cpp с помощью подстановочного расширения, а затем выполнить замену строки, чтобы заменить .cpp на .o.

ответ

0

Я больше знакомы с Unix и сделать gmake, но вы могли бы использовать:

OBJS = $(SOURCES:.cpp=.o) 

(при условии, исходные файлы могут быть перечислены в ИСТОЧНИКОВ)

+1

Это сработает, но тогда у меня будет такая же проблема с заданием списка .cpp-файлов, а не файлов .o. Моя цель - не редактировать файл make каждый раз, когда я добавляю или удаляю исходный файл. –

0

Here еще один ответ, который мог бы помочь вы.

Другим решением может быть использование обертки пакетного файла, в котором создается список всех файлов .cpp с «для» цикла, как

del listoffiles.txt 
echo SOURCES= \ >> listoffiles.txt 
for %i in (*.dll) do @echo %i \ >>listoffiles.txt 
echo. >> listoffiles.txt 

После этого, вы можете попробовать использовать это с ! INCLUDE препроцессора макрос в NMAKE:

!INCLUDE listoffiles.txt 

(я уверен, что это не будет работать с нуля, но общая идея должна быть ясна).

4

В NMAKE нет особо элегантного способа сделать это. Если это возможно, вы должны использовать GNU Make вместо этого, который доступен в Windows и значительно облегчает многие задачи.

Если вы должны использовать NMAKE, вы должны использовать рекурсивный make, чтобы сделать это автоматически, потому что NMAKE только расширяет подстановочные знаки в списках предварительных условий. Я продемонстрировал, как это сделать в ответ на другой аналогичный вопрос here.

Надеюсь, что это поможет.