强制Makefile中的先决条件顺序

Joh*_*ohn 14 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
Run Code Online (Sandbox Code Playgroud)

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

Bet*_*eta 23

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

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

  • 好的,收回最后一个.显然,$ ^在该网址上被描述两次 - 一旦它提到仅包含订单,而另一次则没有包含.我会向文档所有者发送一封电子邮件,让他们知道. (3认同)