我怎么知道g++在哪里可以找到一个包含文件?基本上如果我
#include <foo.h>
g将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,在最后,有没有一种方法可以告诉我g选择编译的foo.h的绝对路径?如果在无数的搜索路径中有不止一个foo.h,这一点尤其重要。如果没有办法做到这一点...有没有办法让g++告诉我,在包含默认值和所有包含选项之后,它的最终搜索路径是什么?
xcitsw881#
g++ -H ...
我也将打印包含文件的完整路径,格式显示哪个头包含哪个
gmxoilav2#
这将给予make依赖项,列出include文件的绝对路径:
gcc -M showtime.c
如果您不希望系统包含(即#include <something.h>)然后用途:
#include <something.h>
gcc -MM showtime.c
kkih6yb83#
当然用
g++ -E -dI ... (whatever the original command arguments were)
4dbbbstv4#
如果您的构建过程非常复杂…
constexpr static auto iWillBreak = #include "where/the/heck/is/this/file.h"
这将(几乎肯定)导致在文件顶部附近出现编译错误。这应该会显示一个编译器错误,并显示编译器看到的路径。显然,这比其他答案更糟糕,但有时这种黑客是有用的。
aemubtdh5#
如果使用-MM或相关选项之一(-M等),则只会获得包含的头文件列表,而不会获得所有其他预处理器输出(您似乎可以使用建议的g++ -E -dI解决方案获得)。您也可以使用-H选项。它打印标题,因为它们包含一个点.作为标题中每个嵌套级别的前缀。你直接包含的内容前面加了一个点和一个空格;这些文件包含的文件的前缀是两个点和一个空格,等等。这可能会有帮助。输出显示在stderr而不是stdout上。(另请参阅answer,它建议使用-H,但不包括有关输出格式的信息。
-MM
-M
g++ -E -dI
-H
.
stderr
stdout
jc3wubiy6#
对于MSVC,您可以使用/showInclude选项,该选项将显示包含的文件。
/showInclude
可用性注解:编译器会将此信息发送到标准错误输出,在使用windows命令提示符时,默认情况下该输出似乎被抑制。使用2>&1将stderr重定向到stdout以查看它。
2>&1
6条答案
按热度按时间xcitsw881#
我也将打印包含文件的完整路径,格式显示哪个头包含哪个
gmxoilav2#
这将给予make依赖项,列出include文件的绝对路径:
如果您不希望系统包含(即
#include <something.h>
)然后用途:kkih6yb83#
当然用
4dbbbstv4#
如果您的构建过程非常复杂…
这将(几乎肯定)导致在文件顶部附近出现编译错误。这应该会显示一个编译器错误,并显示编译器看到的路径。
显然,这比其他答案更糟糕,但有时这种黑客是有用的。
aemubtdh5#
如果使用
-MM
或相关选项之一(-M
等),则只会获得包含的头文件列表,而不会获得所有其他预处理器输出(您似乎可以使用建议的g++ -E -dI
解决方案获得)。您也可以使用
-H
选项。它打印标题,因为它们包含一个点.
作为标题中每个嵌套级别的前缀。你直接包含的内容前面加了一个点和一个空格;这些文件包含的文件的前缀是两个点和一个空格,等等。这可能会有帮助。输出显示在stderr
而不是stdout
上。(另请参阅answer,它建议使用-H
,但不包括有关输出格式的信息。jc3wubiy6#
对于MSVC,您可以使用
/showInclude
选项,该选项将显示包含的文件。可用性注解:编译器会将此信息发送到标准错误输出,在使用windows命令提示符时,默认情况下该输出似乎被抑制。使用
2>&1
将stderr重定向到stdout以查看它。