Makefile命令执行顺序查询及查看方法咨询
查看Makefile命令执行顺序的实用方法
嘿,要搞清楚Makefile里命令的执行顺序,有几个超实用的方法,我给你挨个拆解清楚:
1. 用make -n(模拟执行,不实际构建)
这是最常用的方法,它会只输出Make将要执行的命令序列,但不会真正运行这些命令,完全不会修改你的文件,非常适合快速确认执行流程。
针对你的Makefile,如果你想查看构建fao目标的执行顺序,只需要在终端里运行:
make -n fao
它会输出类似这样的内容(我帮你修正了拼写错误后的预期输出):
gcc -c -o main.o main.c high.h utils.h gcc -c -o high.o high.c low.h utils.h gcc -c -o low.o low.c utils.h gcc -c -o utils.o utils.c utils.h gcc -o foo main.o high.o low.a utils.o
如果想查看clean目标的执行顺序,就运行:
make -n clean
2. 用make -p(打印所有规则和依赖链)
这个命令会打印出Make解析后的所有规则——包括你写的显式规则,还有Make自带的隐含规则,同时会显示每个目标的完整依赖关系和对应执行命令。通过这个输出,你能清晰看到整个依赖树的结构,明白Make是如何一步步决定执行顺序的。
运行命令:
make -p
输出里会包含你的每个目标(比如fao、main.o等)的完整规则,帮你彻底理清Make的决策逻辑。
3. 用make -d(调试模式,详细追踪执行过程)
如果你的Makefile逻辑比较复杂,或者你想搞明白Make为什么会执行某个命令(比如为什么某个目标被重新构建),可以试试调试模式。它会输出极其详细的追踪信息,包括Make如何检查文件时间戳、如何判断目标是否过时、如何选择要执行的规则等。
运行命令:
make -d fao
虽然输出内容会比较多,但能让你彻底搞清楚Make的每一步操作细节。
额外小提示(针对你的Makefile)
我注意到你的Makefile里有几个小拼写错误,可能会导致构建失败,记得检查修正:
low.o规则里,依赖写成了law.c(应该是low.c吧?),还有utlls.h(正确应该是utils.h)clean规则里的utils....应该是utils.o- 链接命令的目标是
foo,但第一个目标定义的是fao,这里名称不一致,记得统一哦
内容的提问来源于stack exchange,提问作者ZoCode
相关产品推荐
相关产品推荐

