Создать файл: компилировать все файлы .cpp в файлы .o - PullRequest
6 голосов
/ 16 августа 2010

Я пытаюсь создать файл make, который скомпилирует все файлы .cpp в каталоге test в файлы .o в каталоге obj. Ниже приведена сокращенная версия того, что я делаю. Проблема заключается в том, что вызовы, сделанные для компиляции файлов .o, имеют правильное имя .o, но все они компилируют один и тот же файл .cpp.

gcc -c -o obj/foo.o test/foo.c
gcc -c -o obj/bar.o test/foo.c
gcc -c -o obj/baz.o test/foo.c

Что мне нужно изменить, чтобы компилировать соответствующий .cpp файл?

CPP_FILES := $(wildcard test/*.cpp)
OBJ_FILES = $(patsubst test/%.cpp,obj/%.o,$(CPP_FILES))


obj/%.o: $(CPP_FILES)
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

executable : $(OBJ_FILES) foo.a
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@

Спасибо.

1 Ответ

6 голосов
/ 16 августа 2010

Вы должны соответствовать % для вашего правила шаблона.в данный момент вы говорите, что каждый .o зависит от каждого cpp файла.И $< является первым из них.

Замените его на:

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