强制Makefile中的先决条件顺序

时间:2013-01-10 20:56:15

标签: makefile gnu-make

我有第三方makefile,并且我希望在第一个构建自定义目标(T2)之前不构建其中一个目标(T1)。通常,这可以通过使T2成为T1的先决条件来实现。但是,T1在其中一个规则中使用了$ ^ ..因此,通过添加先决条件,我最终破坏了构建......我所拥有的是:

T1: x y z T2
    $(MAKE) -j $^;
    # fails because T2 should not be passed to the make!!!

.PHONY: T2

T2:
    #do some linking and prep for T1

有没有一种方法可以确保T2在T1之前运行? (注意:上面的例子实际上有点简化.T1实际上是Linux内核makefile中的vmlinux目标,因此重写它不仅困难,而且使代码不可移植。而且,我之前无法运行T2由于某些其他依赖项而在内核上调用make。)

2 个答案:

答案 0 :(得分:23)

将T2作为order-only prerequisite

T1: x y z | T2
    $(MAKE) -j $^;
    # Make will run the T2 rule before this one, but T2 will not appear in $^

答案 1 :(得分:1)

您是否可以按照正确的顺序使用两个目标在构建脚本中调用Make,例如

make T2 T1

这样您就不需要对T1进行任何修改。