Makefile:目录中的多个类似目标

时间:2017-11-08 18:19:46

标签: loops makefile

假设我有一个这样的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

其中modAmodBmodC是我的程序的小子实例,位于$(路径)中,所有内容都以相同的方式构建(如您所见)。

如何使这个更漂亮,就像在modA modB modC列表中的for循环一样?

1 个答案:

答案 0 :(得分:1)

您可以将pattern rulessecondary expansion合并。你也应该使用标准的make变量。

CXX = g++

main: modA.o modB.o modC.o
        $(CXX) ?$(CXXFLAGS) -o $@ $^

.SECONDEXPANSION:
%.o: $(path)/$$*/$$*.cpp
        $(CXX) $(CXXFLAGS) -c -o $@ $<