Sha*_*ala 35 makefile gnu-make
在makefile中,依赖行的形式是 -
abc: x y z
Run Code Online (Sandbox Code Playgroud)
所有三个组件(x,y,z)本身都是makefile中进一步向下的依赖行中的目标.
如果调用make abc,将执行三个目标x,y,z的顺序是什么?
Eld*_*mov 50
默认情况下,执行顺序与先决条件列表中指定的顺序相同,除非在这些先决条件之间定义了任何依赖关系.
abc: x y z
Run Code Online (Sandbox Code Playgroud)
订单是x y z.
abc: x y z
y : z
Run Code Online (Sandbox Code Playgroud)
订单将是x z y.
但理想情况下,您应该设计Makefile,以便它不依赖于指定先决条件的顺序.也就是说,如果y要执行后z,有必须是一个y : z依赖.
请记住,GNU Make可以并行执行一些配方,请参阅Mat的回答.
Mat*_*Mat 37
你真的不应该依赖它们的执行顺序 - 在其他条件相同的情况下,这些先决条件的所有三个配方都可以并行运行.
唯一的硬性规则是在运行目标配方之前必须满足所有先决条件.
如果和,并且没有并行执行之间没有依赖关系x,GNU make似乎按照您指定的顺序运行它们,但是在文档中不能保证这一点. yz
Jon*_*ler 17
POSIX描述make包括一个基本原理:
在
make中历史最悠久的实现公用事业处理的对象中的在左到右的顺序的先决条件,并且生成文件格式要求这一点.它支持许多生成yacc程序的makefile中使用的标准习惯用法; 例如:Run Code Online (Sandbox Code Playgroud)foo: y.tab.o lex.o main.o $(CC) $(CFLAGS) -o $@ t.tab.o lex.o main.o在此示例中,如果
make选择任意顺序,则lex.o可能无法使用正确的顺序y.tab.h.虽然可能有更好的方式来表达这种关系,但它在历史上被广泛使用.希望并行更新先决条件的实现应该需要显式扩展make或makefile格式来完成它,如前所述.
(我相信t.tab.o在$(CC)线路是错字y.tab.o,但有什么理由实际上说的.)
因此,从左到右处理先决条件的观察行为在此处进行验证,尽管它仅在基本原理部分中,而不在主要描述中.基本原理还提到并行make等问题.
| 归档时间: |
|
| 查看次数: |
31294 次 |
| 最近记录: |