2011-04-29 159 views
60

如何判断g ++能够找到包含文件?基本上如果我如何判断头文件包含在哪里?

#include <foo.h> 

g ++将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,在几天结束时,是否有一种方法可以告诉g ++选择编译的foo.h的绝对路径?如果在多种搜索路径中有多个foo.h,尤其相关。

缺乏一种方法来实现...有没有办法让g ++告诉我它的最终搜索路径是什么,包括默认和所有包含选项?

+1

相关:有什么办法可以告诉哪个父包含文件包含子包含文件?即(提示:gcc -E并不在那里......可能会被处理以产生它)。 – 2013-01-08 22:53:46

回答

47

这会给使依赖其名单包括文件的绝对路径:

gcc -M showtime.c 

如果您不希望系统包括(即#include <something.h>),然后使用:

gcc -MM showtime.c 
+12

应该注意的是,如果您与“-o myObj.o”一起使用,输出(而不是编译的二进制)会进入“myObj.o”。 -M有一个隐含的-E,所以编译不成立。我发现-MD是一个非常有用的选项,它执行编译并将输出放在myObj.d中。为你的编译行做一个合适的参数,而不需要像* .o这样的奇怪效果,现在包含输出而不是二进制。谢谢你的帮助。 – harschware 2011-04-29 17:33:09

4

当然使用

g++ -E -dI ... (whatever the original command arguments were) 
3

如果使用-MM或相关的选项之一(-M,等等),你得到的只是所包含无需其他所有的预处理器输出(你好像头的列表以获得建议的g++ -E -dI解决方案)。

+0

'g ++ -MM t.cc'根本不显示包含,只是'to:t。 cc'。它需要别的东西吗? – wallyk 2011-04-29 16:59:56

+1

不错 - 为了完整性,您可以使用'/ showIncludes'选项与MSVC相似。 MSVC甚至会缩进来显示标题的嵌套(我没有在GCC上看到'-M')。 – 2011-04-29 17:02:39

+0

@wallyk:试一下'-M' – 2011-04-29 17:03:25

58
g++ -H ... 

还将打印包含文件的完整路径,其格式显示哪个头文件包含哪个文件夹。

+3

在我的经验中,这似乎比-M更有帮助。我喜欢什么包括什么的分层显示。 – 2013-12-18 13:17:23

+0

很好,这对调试目的很有帮助。 – 2015-03-15 03:01:49

+0

这是最好的答案。您可以将其添加到您的构建过程中,而无需更改任何其他内容 – Timmmm 2015-06-03 13:29:56

相关问题