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

Wes*_*ler 5 c c++ gcc g++ include-path

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

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

我们使用CMakeLisats进行编译.如果有一个指令我可以粘贴到CMakeLists.txt,这将是额外的精彩.

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

Bas*_*tch 13

尝试gccg++使用-H选项(到预处理器部分).来自doc:

-H

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

它会告诉您包含的所有标题.您可以过滤掉(带grep -v或不awk)您不想要的那些.

Oliver Matthews的回答中-M提出的选项相比,它并没有告诉你更多(但是给出了所有包含的文件).

  • 输出比 -M 更漂亮,但 -MM 删除了许多讨厌的系统文件。就我而言,有很多讨厌的文件。我仍然需要进入输出并删除 boost 和 Qt 标头(我使用了 X2 编辑器。grep、sed 或 awk 也可以做到这一点)。 (3认同)

Oli*_*ews 9

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

手册:

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

这是值得一读的手册,以考虑其他-M子选项(-MM并且-MF尤其可能使用的).