我有第三方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。)
答案 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进行任何修改。