我想让g ++ / gcc告诉我非系统的所有路径#include in C ++ build。事实证明,这是一个艰难的搜索,因为谷歌通过十种不同的方式解释它。
我想要这些文件名和路径,以便我可以将它们添加到Exuberant CTAGS的搜索路径中。我们有一个庞大的项目,如果我在整个事情上使用ctags,那么生成标签文件大约需要半个小时,而且编辑器的查找时间也差不多。
我们使用CMakeLisats进行编译。如果有一个指令我可以粘贴到CMakeLists.txt中,这将是非常好的。
我真的不需要默认路径和文件名,Johnathan Wakely为here提供了一个很好的工具。我认为这几乎涵盖了这是一个交叉编译工作的事实。我也不需要跨系统文件。
答案 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
可能会有用)。