14

我有一个第三方生成文件,我希望在先构建另一个自定义目标 (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 )。

4

2 回答 2

24

将 T2 作为仅订单的先决条件

T1: x y z | T2
    $(MAKE) -j $^;
    # Make will run the T2 rule before this one, but T2 will not appear in $^
于 2013-01-10T22:56:04.417 回答
1

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

make T2 T1

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

于 2013-01-10T21:33:21.823 回答