为何make仅运行单个目标,而make default会执行所有依赖?
为什么
make和make default的执行结果不一样? 这其实是Make工具的核心规则在起作用,我给你拆解得明明白白:
1. make不带参数时的行为
当你直接敲make命令而不指定目标时,Make会自动执行Makefile里第一个被定义的目标。如果你的Makefile里build目标写在最前面(比如在default目标之前),那make就只会执行build这一个目标,完全不会管后面的其他目标。
2. make default指定目标时的行为
当你明确写make default时,Make会严格按照你指定的default目标来执行,同时会递归执行这个目标的所有依赖项。你的default目标应该是类似这样定义的:
default: build run
这种情况下,Make会先处理build依赖(执行build目标的命令),等build完成后,再处理run依赖(执行run目标的命令),所以看起来就是连续执行了build和run两个阶段。
小验证技巧
如果你想确认当前Makefile的默认目标是什么,可以在终端里执行:
make -p | grep "^.DEFAULT_GOAL"
这个命令会输出Make当前识别的默认目标,你就能直观看到是不是build了。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

