假设我有一个这样的makefile:
main: modA.o modB.o modC.o
g++ -o main modA.o modB.o modC.o
modA.o: $(path)/modA/modA.cpp
g++ -c $(path)/modA/modA.cpp
modB.o: $(path)/modB/modB.cpp
g++ -c $(path)/modB/modB.cpp
modC.o: $(path)/modC/modC.cpp
g++ -c $(path)/modC/modC.cpp
其中modA
,modB
,modC
是我的程序的小子实例,位于$(路径)中,所有内容都以相同的方式构建(如您所见)。
如何使这个更漂亮,就像在modA modB modC
列表中的for循环一样?
答案 0 :(得分:1)
您可以将pattern rules与secondary expansion合并。你也应该使用标准的make变量。
CXX = g++
main: modA.o modB.o modC.o
$(CXX) ?$(CXXFLAGS) -o $@ $^
.SECONDEXPANSION:
%.o: $(path)/$$*/$$*.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<