GNU Make 会自动添加额外的先决条件吗?
Would GNU Make automatically add extra prerequisite?
以下示例片段来自 "Managing Projects with GNU Make(3rd edition)" 第 21 页。
count_words: counter.o lexer.o -lfl
作者说 make
会通过隐式规则自动将 count_words.o
添加到先决条件列表中。引用:
..., make identifies four prerequisites: count_words.o (this prerequisite is missing from the makefile, but is provided by the implicit rule), counter.o, lexer.o, and -lfl.
但是,我的测试不符合那个。这是我的测试:
prog: abc.o
@echo $^
abc.o:
@echo abc.o built.
prog.o:
@echo prog.o bulit.
运行make
后的输出为:
abc.o built.
abc.o
make
没有为目标 prog
寻找 prog.o
。
有什么问题?我的测试有问题吗?
顺便说一下,我的测试是 Cygwin
和 GNU Make 4.1
。
您为 prog
目标提供了配方。作者没有针对 count_words
目标。这就是区别。
作者指望内置的 %: %.o
规则生效。你用你的规则覆盖了它。
从 prog
配方中删除 @echo $^
,然后重试。
以下示例片段来自 "Managing Projects with GNU Make(3rd edition)" 第 21 页。
count_words: counter.o lexer.o -lfl
作者说 make
会通过隐式规则自动将 count_words.o
添加到先决条件列表中。引用:
..., make identifies four prerequisites: count_words.o (this prerequisite is missing from the makefile, but is provided by the implicit rule), counter.o, lexer.o, and -lfl.
但是,我的测试不符合那个。这是我的测试:
prog: abc.o
@echo $^
abc.o:
@echo abc.o built.
prog.o:
@echo prog.o bulit.
运行make
后的输出为:
abc.o built.
abc.o
make
没有为目标 prog
寻找 prog.o
。
有什么问题?我的测试有问题吗?
顺便说一下,我的测试是 Cygwin
和 GNU Make 4.1
。
您为 prog
目标提供了配方。作者没有针对 count_words
目标。这就是区别。
作者指望内置的 %: %.o
规则生效。你用你的规则覆盖了它。
从 prog
配方中删除 @echo $^
,然后重试。