如何让g ++列出所有#included文件的路径

时间:2013-12-09 17:06:49

标签: c++ c gcc g++ include-path

我想让g ++ / gcc告诉我非系统的所有路径#include in C ++ build。事实证明,这是一个艰难的搜索,因为谷歌通过十种不同的方式解释它。

我想要这些文件名和路径,以便我可以将它们添加到Exuberant CTAGS的搜索路径中。我们有一个庞大的项目,如果我在整个事情上使用ctags,那么生成标签文件大约需要半个小时,而且编辑器的查找时间也差不多。

我们使用CMakeLisats进行编译。如果有一个指令我可以粘贴到CMakeLists.txt中,这将是非常好的。

我真的不需要默认路径和文件名,Johnathan Wakely为here提供了一个很好的工具。我认为这几乎涵盖了这是一个交叉编译工作的事实。我也不需要跨系统文件。

2 个答案:

答案 0 :(得分:13)

使用gcc选项(g++部分)尝试-H-H。来自doc:

  

grep -v

     

除了其他正常活动外,还打印所使用的每个头文件的名称。每个名称都缩进以显示'#include'堆栈的深度。即使发现它们无效,也会打印预编译的头文件;使用“... x”打印无效的预编译头文件,使用“...!”打印有效的头文件。

它会告诉您包含的所有标题。您可以过滤掉awk-M那些您不想要的内容。

preprocessor中建议的{{1}}选项相比,它不会告诉您更多(但会提供所有包含的文件)。

答案 1 :(得分:9)

您需要使用-M选项调用g ++。

来自manual

  

输出规则,而不是输出预处理的结果   适合描述主源文件的依赖关系。   预处理器输出一个包含目标文件名的make规则   对于该源文件,冒号和所有包含的名称   文件,包括来自-include或-imacros命令行的文件   选项。

值得阅读手册以考虑其他-M子选项(-MM-MF可能会有用)。