打印出编译文件所需的全部内容

时间:2014-11-20 19:11:21

标签: makefile

我有很多Make文件通过目录层次结构,其中一些定义用于编译的C(CPP)和H文件,其中一些没有,不添加到CPFLAFS -I../../SomeDir1 -I../SomeDir2/SomeDir2/Inc.等。

部分Make文件是通过make -C PATH Target调用的。

事情是源的层次结构多年来增长,涵盖不同的项目和目标平台。 现在公司里没有人记得"为什么"并且没有足够的文档。

问题:有没有办法知道用于构建最终目标的特定来源和头文件" all" ?

谢谢

1 个答案:

答案 0 :(得分:0)

有一些方法,我知道两个。两者都要求您运行make all,然后删除所有生成的文件,以便实际重建所有相关文件(通常为make clean)。

使用strace

如果strace可用,您可以通过跟踪和分析系统调用来查找文件。 你可以这样做:

$ strace -f -o trace make all
$ grep 'open.*\.[ch]"' trace | grep -v 'open("/\(tmp\|usr\)' | sed -e 's/.*open("//' -e 's/".*//' | sort -u

使用依赖项文件(不适用于所有编译器)

如果编译器可以生成依赖项文件(即gccarmcc),则可以分析依赖项文件。通过在CFLAGSCPPFLAGS中添加相应选项,确保生成相关性文件。对于gcc,这将是-MMD。如果Makefiles写得很好,你可以在命令行设置CPPFLAGS,我将在这里使用这个例子。

$ make all CPPFLAGS+=-MMD
$ find -name "*.d" -exec cat {} \; | sed -e 's/[:\\]//' -e 's/ /\n/g' | grep '\.[ch]$' | sort -u