makefile 的调试
-d
打印出依赖
-n
打印出执行的命令, 但是尽可能不执行。本质上是打印第二阶段的执行命令。
-p
执行的过程中,同时打印出数据库。打印第二阶段的命令的执行效果,和第一阶段的数据库。
normal command execution occurs here
# Make data base, printed on Thu Apr 29 20:58:13 2004
# Variables
…
# Directories
…
# Implicit Rules
…
# Pattern-specific variable values
…
# Files
…
# VPATH Search Paths
$(warning message)
返回值是空字符串,可以附加在任何地方
$(error message)
同warning
-qp
-pn
1: 找出执行的是哪个目标,哪些目标target
make --debug=b
2: 找出执行的命令recipe
make -n
3: 打印出执行的数据库
make -p
4: 找出某个变量/函数的执行时刻
$(warning message)
$(error message)
5: 找出变量/函数的执行值
$(warning message $(var) )
$(error message $(var) )
6: 实际执行的target和rules
可以对比着
debugb.txt和database.txt看
makefile顺序
target: A B C
rules-to-make-target
A: a1 a2
rules-to-make-A
B: b1 b2
rules-to-make-B
C: c1 c2
rules-to-make-C
a1:
rule-a1
a2:
rule-a2
b1:
rule-b1
b2:
rule-b2
c1:
rule-c1
c2:
rule-c2
执行顺序
rule-a1
rule-a2
rules-to-make-A
rule-b1
rule-b2
rules-to-make-B
rule-c1
rule-c2
rules-to-make-C
rules-to-make-target
vim中对print data base 的搜索
\(cd .* && make.*\|# Make data base, printed on.*\|# make\[.\]: Entering directory.*\|# make\[.\]: Leaving directory.*\)
-d
打印出依赖
-n
打印出执行的命令, 但是尽可能不执行。本质上是打印第二阶段的执行命令。
-p
执行的过程中,同时打印出数据库。打印第二阶段的命令的执行效果,和第一阶段的数据库。
normal command execution occurs here
# Make data base, printed on Thu Apr 29 20:58:13 2004
# Variables
…
# Directories
…
# Implicit Rules
…
# Pattern-specific variable values
…
# Files
…
# VPATH Search Paths
$(warning message)
返回值是空字符串,可以附加在任何地方
$(error message)
同warning
-qp
-pn
1: 找出执行的是哪个目标,哪些目标target
make --debug=b
2: 找出执行的命令recipe
make -n
3: 打印出执行的数据库
make -p
4: 找出某个变量/函数的执行时刻
$(warning message)
$(error message)
5: 找出变量/函数的执行值
$(warning message $(var) )
$(error message $(var) )
6: 实际执行的target和rules
可以对比着
debugb.txt和database.txt看
makefile顺序
target: A B C
rules-to-make-target
A: a1 a2
rules-to-make-A
B: b1 b2
rules-to-make-B
C: c1 c2
rules-to-make-C
a1:
rule-a1
a2:
rule-a2
b1:
rule-b1
b2:
rule-b2
c1:
rule-c1
c2:
rule-c2
执行顺序
rule-a1
rule-a2
rules-to-make-A
rule-b1
rule-b2
rules-to-make-B
rule-c1
rule-c2
rules-to-make-C
rules-to-make-target
vim中对print data base 的搜索
\(cd .* && make.*\|# Make data base, printed on.*\|# make\[.\]: Entering directory.*\|# make\[.\]: Leaving directory.*\)
sed -n -e '/# make\[.\]: Entering directory /p' -e '/# make\[.\]: Leaving directory /p' -e '/cd .* && make /p' -e '/# Make data base, printed on/p' -e '/^make /p' p.txt
查询 --debug=a日志中用到的全部target和makefile
VIM正则表达式
\(^Reading makefile `.*$\|Considering target file `.*$\|^.*$\nGNU Make 3\.80\|^make\[[0-9]\+\]: Entering directory `.*$\|^make\[[0-9]\+\]: Leaving directory `.*$\)