如何判断g ++能够找到包含文件?基本上如果我如何判断头文件包含在哪里?
#include <foo.h>
g ++将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,在几天结束时,是否有一种方法可以告诉g ++选择编译的foo.h的绝对路径?如果在多种搜索路径中有多个foo.h,尤其相关。
缺乏一种方法来实现...有没有办法让g ++告诉我它的最终搜索路径是什么,包括默认和所有包含选项?
如何判断g ++能够找到包含文件?基本上如果我如何判断头文件包含在哪里?
#include <foo.h>
g ++将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,在几天结束时,是否有一种方法可以告诉g ++选择编译的foo.h的绝对路径?如果在多种搜索路径中有多个foo.h,尤其相关。
缺乏一种方法来实现...有没有办法让g ++告诉我它的最终搜索路径是什么,包括默认和所有包含选项?
这会给使依赖其名单包括文件的绝对路径:
gcc -M showtime.c
如果您不希望系统包括(即#include <something.h>
),然后使用:
gcc -MM showtime.c
应该注意的是,如果您与“-o myObj.o”一起使用,输出(而不是编译的二进制)会进入“myObj.o”。 -M有一个隐含的-E,所以编译不成立。我发现-MD是一个非常有用的选项,它执行编译并将输出放在myObj.d中。为你的编译行做一个合适的参数,而不需要像* .o这样的奇怪效果,现在包含输出而不是二进制。谢谢你的帮助。 – harschware 2011-04-29 17:33:09
当然使用
g++ -E -dI ... (whatever the original command arguments were)
如果使用-MM
或相关的选项之一(-M
,等等),你得到的只是所包含无需其他所有的预处理器输出(你好像头的列表以获得建议的g++ -E -dI
解决方案)。
'g ++ -MM t.cc'根本不显示包含,只是'to:t。 cc'。它需要别的东西吗? – wallyk 2011-04-29 16:59:56
不错 - 为了完整性,您可以使用'/ showIncludes'选项与MSVC相似。 MSVC甚至会缩进来显示标题的嵌套(我没有在GCC上看到'-M')。 – 2011-04-29 17:02:39
@wallyk:试一下'-M' – 2011-04-29 17:03:25
g++ -H ...
还将打印包含文件的完整路径,其格式显示哪个头文件包含哪个文件夹。
在我的经验中,这似乎比-M更有帮助。我喜欢什么包括什么的分层显示。 – 2013-12-18 13:17:23
很好,这对调试目的很有帮助。 – 2015-03-15 03:01:49
这是最好的答案。您可以将其添加到您的构建过程中,而无需更改任何其他内容 – Timmmm 2015-06-03 13:29:56
相关:有什么办法可以告诉哪个父包含文件包含子包含文件?即(提示:gcc -E并不在那里......可能会被处理以产生它)。 – 2013-01-08 22:53:46