我正在尝试创建一个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 $@
感谢。
答案 0 :(得分:6)
您需要将%
与模板规则相匹配。目前你说每个.o都依赖于每个 cpp文件。而$<
是他们中的第一个。
将其替换为:
obj/%.o : test/%.cpp