在制作手册中说:
在第一阶段,它会读取所有的makefile,包括makefile, 内部化所有变量及其值,隐含和 显式规则,并构造所有目标的依赖图 和他们的先决条件。
我不明白依赖图是如何构建的?请考虑以下makefile:
%.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 rule中,只有在目标和先决条件模式都匹配时才会覆盖。在这种情况下,我认为%.o: %.z
隐式规则已与模式匹配。
答案 0 :(得分:3)
过去一年左右,我在一个非常非常庞大的代码库中使用Makefiles做了很多工作。我很生病(1s)!
总的来说,答案是“最后宣布获胜”。你也必须抗衡 使用默认的make后缀规则(在Solaris上可以在/usr/share/lib/make/make.rules中找到)。
因此,如果您想要覆盖隐式规则,请将其放在最后 Makefile层次结构。如果要刷新后缀列表,可以执行任一操作 或两者兼有
行到你的Makefile,
在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,作为一种侧面照明。