помогите с файлом make - PullRequest
1 голос
/ 01 декабря 2010

У меня есть такой файл make ....... некоторые файлы находятся в главном каталоге, а некоторые другие в каталоге тестов ..

VPATH = tests

objects = main.o script.o factory.o serve.o enter.o\
           login.o notify.o check.o
script : $(objects)
    g++ $(objects) -lcurl -o script

main.o : script.h
script.o : enter.h login.h factory.h
factory.o : check.h notify.h serve.h
check.o :
serve.o : check.h
notify.o :
enter.o : check.h
login.o : check.h

.PHONY : clean
clean :
    -rm *.o script

Я хочу сделать, чтобы сохранитьобъектные файлы в каталог, откуда происходит его cpp-файл, т. е. если script.cpp был внутри папки tests, то я хочу, чтобы script.o также находился внутри папки tests .. теперь он просто сохраняет файл в главной папке ..

Заранее спасибо ..

РЕДАКТИРОВАТЬ 1: Мне нужно добавить файлы позже в папку тестов ... Есть ли способ заставить make-файл распознавать, что новые файлы были добавлены, и компилировать ихтакже

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Вместо жесткого кодирования списка создаваемых файлов, вы можете использовать подстановочный знак для поиска исходных файлов.Вы также можете использовать подстановку, чтобы преобразовать это в список объектных файлов.Предоставьте универсальное правило для сборки .c в .o, и все должно быть готово.

FILES_TO_BUILD := $(wildcard *.c) $(wildcard tests\*.c)
OBJECTS_FILES  := $(patsubst %.c,%.o,$(FILES_TO_BUILD))

%.o: %.c
    $(CC) $(COPTS) $^ # or whatever your compiler line is

script: $(OBJECT_FILES)
    g++ $^ -lcurl -o $@

Я не проверял этот make-файл (он просто не в моей голове), но он должен датьс чего-то начать.

0 голосов
/ 01 декабря 2010

Вы можете добавить что-то вроде

 mv *.d $(VPATH)/

в вашем make-файле, что-то вроде:

...
script : $(objects)
    g++ $(objects) -lcurl -o script
    mv *.d $(VPATH)/
...

Возможно, вам потребуется добавить @ перед mv , " @ mv ... "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...