如何让Make工具告知当前默认目标?
如何让Make工具输出当前默认目标
嘿,这个问题我之前折腾递归Make系统的时候也碰到过,分享几个实用的办法来找出当前的默认目标:
方法1:用make -p解析Make的内部数据库
GNU Make提供了-p参数,会打印出它解析后的所有规则、变量和内部状态,我们可以通过过滤来定位默认目标:
- 如果已经显式设置了
.DEFAULT_GOAL,直接运行以下命令就能看到结果:make -p | grep "^.DEFAULT_GOAL" - 如果是隐式的默认目标(也就是第一个不以
.开头的目标),可以用awk脚本精准提取:
这个脚本会在Make的规则区域里,找到第一个非注释、非空行的目标名,也就是默认目标。make -p | awk '/^# Files/,/^# Finished Make data base/ {if ($0 !~ /^#/ && $0 !~ /^$/ && !done) {print "Default target:", $1; done=1}}'
方法2:临时添加调试目标到Makefile
在顶层Makefile或者公共包含文件里,临时加一个简单的调试目标,完全不会改动原有逻辑:
show-default-goal: @echo "Current default goal is: $(.DEFAULT_GOAL)"
然后运行:
make show-default-goal
$(.DEFAULT_GOAL)是GNU Make的内置变量,不管默认目标是显式设置的还是隐式推导的,它都会返回正确的目标名。用完记得把这个调试目标删掉就行。
注意事项
以上方法都是针对GNU Make的,如果你用的是其他Make实现(比如BSD Make),语法可能会有差异,但绝大多数开发场景下大家用的都是GNU Make。
内容的提问来源于stack exchange,提问作者Roger Lipscombe
相关产品推荐
相关产品推荐

