如何在GNU Make中获取目标构建的.c/.h依赖及特定目标依赖报告?
如何在GNU Make中列出依赖文件与特定目标依赖
一、列出所有.c/.h文件依赖
有几种实用方法可以获取构建过程中涉及的所有.c和.h文件:
- 用
make -n结合文本过滤:make -n会打印Make将要执行的命令但不实际运行,搭配grep可提取源文件和头文件路径:
注:如果Makefile里的编译命令格式特殊,可能需要调整grep的匹配规则。make -n | grep -E '\.c|\.h' | sort | uniq - 读取自动生成的.d依赖文件:若Makefile启用了自动依赖生成(通常通过
-MMD或-MD编译选项),构建后会生成与目标文件同名的.d文件,其中包含对应的.c和.h依赖。可批量查看:cat *.d | grep -E '\.c|\.h' | sort | uniq - 使用
make --print-data-base:该选项会输出Make的所有内部数据库,包含所有依赖关系,过滤后可得到所有.c/.h文件:make --print-data-base | grep -E '^[^#].*\.c|^[^#].*\.h' | sort | uniq
二、获取特定目标的所有依赖报告
针对单个目标的依赖,以下方法更精准:
- 用
make -d结合过滤:-d会输出Make的调试信息,包含目标的依赖链,指定目标后过滤关键内容:
该命令会展示目标的依赖查找过程,包括直接和间接依赖。make -d <目标名> 2>&1 | grep -A 5 -B 5 'Considering target file' - 使用
make --print-data-base <目标名>:仅输出指定目标的数据库信息,其中包含完整依赖列表:make --print-data-base <目标名> | grep -A 10 '<目标名>:' - 在Makefile中添加自定义目标:如果需要频繁查看,可在Makefile中添加专门的目标,例如:
将.PHONY: show-deps show-deps: @echo "Dependencies for mytarget:" @echo $^mytarget替换为你要查看的目标名,运行make show-deps就能直接看到该目标的所有直接依赖。若需要递归显示所有间接依赖,可结合Make的$(foreach)和$(wildcard)函数扩展这个目标。
内容的提问来源于stack exchange,提问作者se_pavel
相关产品推荐
相关产品推荐

