我在src
目录中even_odd_list.c
了源文件。这是我正在试验makefile
VPATH = src include
CPPFLAGS = -I include
even_odd_list:
我已经打电话给make -pn
检查所有隐含的规则,但我没有看到一个似乎适用的规则。
我错过了什么?我将不胜感激对正在执行的逻辑流程的解释。
Make 将匹配此隐式规则(通过检查make -pf/def/null
找到):
%: %.c
# commands to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
这里忽略的事实是,如何使匹配目标为隐式规则。在这种情况下,没有指定先决条件,但如果规则的先决条件存在或应该存在并且可以创建,则 make 将与隐式规则匹配。如果存在匹配隐式规则的先决条件且未指定,则将其视为隐式先决条件。
因此,要匹配的第一个规则是:
%: %.c
# commands to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
此页面 http://www.gnu.org/software/make/manual/html_node/Using-Implicit.html 提供了更多信息。
使用 make -d
将显示正在执行的步骤。下面是此示例的相关输出:
Updating goal targets....
Considering target file `even_odd_list'.
File `even_odd_list' does not exist.
Looking for an implicit rule for `even_odd_list'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.o'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.c'.
Found prerequisite `even_odd_list.c' as VPATH `src/even_odd_list.c'
Found an implicit rule for `even_odd_list'.
Considering target file `even_odd_list.c'.
Looking for an implicit rule for `even_odd_list.c'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.y'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.l'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.w'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.w'.
Trying pattern rule with stem `even_odd_list.c'.
Trying implicit prerequisite `even_odd_list.c,v'.
Trying pattern rule with stem `even_odd_list.c'.
Trying implicit prerequisite `RCS/even_odd_list.c,v'.
Trying pattern rule with stem `even_odd_list.c'.
Trying implicit prerequisite `RCS/even_odd_list.c'.
Trying pattern rule with stem `even_odd_list.c'.
Trying implicit prerequisite `s.even_odd_list.c'.
Trying pattern rule with stem `even_odd_list.c'.
Trying implicit prerequisite `SCCS/s.even_odd_list.c'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.y'.
Looking for a rule with intermediate file `even_odd_list.y'.
Avoiding implicit rule recursion.
Trying pattern rule with stem `even_odd_list.y'.
Trying implicit prerequisite `even_odd_list.y,v'.
Trying pattern rule with stem `even_odd_list.y'.
Trying implicit prerequisite `RCS/even_odd_list.y,v'.
Trying pattern rule with stem `even_odd_list.y'.
Trying implicit prerequisite `RCS/even_odd_list.y'.
Trying pattern rule with stem `even_odd_list.y'.
Trying implicit prerequisite `s.even_odd_list.y'.
Trying pattern rule with stem `even_odd_list.y'.
Trying implicit prerequisite `SCCS/s.even_odd_list.y'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.l'.
Looking for a rule with intermediate file `even_odd_list.l'.
Avoiding implicit rule recursion.
Trying pattern rule with stem `even_odd_list.l'.
Trying implicit prerequisite `even_odd_list.l,v'.
Trying pattern rule with stem `even_odd_list.l'.
Trying implicit prerequisite `RCS/even_odd_list.l,v'.
Trying pattern rule with stem `even_odd_list.l'.
Trying implicit prerequisite `RCS/even_odd_list.l'.
Trying pattern rule with stem `even_odd_list.l'.
Trying implicit prerequisite `s.even_odd_list.l'.
Trying pattern rule with stem `even_odd_list.l'.
Trying implicit prerequisite `SCCS/s.even_odd_list.l'.
Trying pattern rule with stem `even_odd_list'.
Trying implicit prerequisite `even_odd_list.w'.
Looking for a rule with intermediate file `even_odd_list.w'.
Avoiding implicit rule recursion.
Trying pattern rule with stem `even_odd_list.w'.
Trying implicit prerequisite `even_odd_list.w,v'.
Trying pattern rule with stem `even_odd_list.w'.
Trying implicit prerequisite `RCS/even_odd_list.w,v'.
Trying pattern rule with stem `even_odd_list.w'.
Trying implicit prerequisite `RCS/even_odd_list.w'.
Trying pattern rule with stem `even_odd_list.w'.
Trying implicit prerequisite `s.even_odd_list.w'.
Trying pattern rule with stem `even_odd_list.w'.
Trying implicit prerequisite `SCCS/s.even_odd_list.w'.
Trying pattern rule with stem `even_odd_list'.
Rejecting impossible implicit prerequisite `even_odd_list.w'.
No implicit rule found for `even_odd_list.c'.
Finished prerequisites of target file `even_odd_list.c'.
No need to remake target `even_odd_list.c'; using VPATH name `src/even_odd_list.c'.
Finished prerequisites of target file `even_odd_list'.
Must remake target `even_odd_list'.
cc -I include src/even_odd_list.c -o even_odd_list
Putting child 0x085fbe90 (even_odd_list) PID 24853 on the chain.
Live child 0x085fbe90 (even_odd_list) PID 24853
Reaping winning child 0x085fbe90 PID 24853
Removing child 0x085fbe90 PID 24853 from chain.
Successfully remade target file `even_odd_list'.