gpt4 book ai didi

makefile - 如何解析makefile

转载 作者:行者123 更新时间:2023-12-02 04:40:17 25 4
gpt4 key购买 nike

在制作手册上说:

During the first phase it reads all the makefiles, included makefiles, etc. and internalizes all the variables and their values, implicit and explicit rules, and constructs a dependency graph of all the targets and their prerequisites.

我不明白依赖图是怎么构造的?考虑以下生成文件:

%.o: %.z
echo This is overriden implicit rule
default: foo.o

clean:
rm -f fmake test_second
%.o: %.c
echo This is customized implicit rule

make命令之后

echo This is customized implicit rule
This is customized implicit rule

显示了,但我很期待

echo This is overriden implicit rule
This is overriden implicit rule

将是,因为在 make 规则中只有当目标和先决条件模式都匹配时才会覆盖。在这种情况下,我认为 %.o: %.z 隐式规则已经与模式匹配。

最佳答案

在过去一年左右的时间里,我一直在非常非常大的代码库中使用 Makefile 进行大量工作。我非常讨厌 make(1s)!

一般来说,答案是“最后声明获胜”。你也要争使用默认的 make 后缀规则(在 Solaris 上可以在/usr/share/lib/make/make.rules 中找到)。

因此,如果您希望覆盖的隐式规则生效,请将其放在最后Makefile 层次结构。如果你想刷新后缀列表,你可以做或两者兼而有之

1 添加一个.SUFFIXES:

行到你的 Makefile,

2 用-r 调用

在 MAKEFLAGS(env var)中或在 make 调用命令行上。

[此外,您可以在命令开头添加“@”以仅查看输出它,而不是

echo [输出在这里]

以及实际

[输出在这里]

您还可以通过使用其中一个调试选项来收集洞察力make(1s) 允许。在 Solaris 上,它是 -d、-dd、-D 或 -DD。对于 GNU Make,它是-d 或 --debug。但是请注意,将命令的输出转储到文件中,因为它有很多

您可能想阅读 http://freecode.com/articles/what-is-wrong-with-make , 作为一个侧面照明。

关于makefile - 如何解析makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20990904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com