make文件中的多个目标

时间:2014-03-27 08:30:56

标签: makefile gnu-make

以下规则意味着什么?

$(PROGRAM33).o: $(SYSDIR)/%.o: storeapp%.cpp
                @echo Compiling $< ...

是否等于以下

$(SYSDIR)/%.o: storeapp%.cpp
                @echo Compiling $< ...

$(PROGRAM33).o: $(SYSDIR)/%.o

1 个答案:

答案 0 :(得分:1)

让我们说你有这种makefile:

f1.png: d/p1.xml
f2.png: d/p2.xml
f3.png: d/p3.xml

f1.png f2.png f3.png:
    some-interesting-tool $^ -o $@

这里我们选择只编写一次shell行,分别列出依赖项。

因为在这种情况下,目标(f%.png)通过(简单的)制作模式与它们的依赖关系(d/p%.xml)相关,所以我们可以缩短这个样板:

f1.png f2.png f3.png: f%.png: d/p%.png
    some-interesting-tool $^ -o $@

这是静态模式规则。比普通模式规则好多了恕我直言。它们具有很好的属性,无论规则中匹配的%是什么,都可以在配方中以$*的形式获得。

请注意,目标模式必须与每个源文件匹配,并非不合理。因此,在您的情况下,每个${PROGRAM33}.o(可能扩展为单个文件)必须与${SYSDIR}/%.o匹配。