我如何知道 g++ 在哪里能够找到包含文件?基本上如果我
#include <foo.h>
g++ 将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,归根结底,有没有办法告诉我 g++ 选择编译的 foo.h 的绝对路径?如果在无数搜索路径中有多个 foo.h,则尤其相关。
缺少实现该目标的方法...有没有办法让 g++ 告诉我在包含默认值和所有包含选项后它的最终搜索路径是什么?
g++ -H ...
还将以显示哪个标题包含哪个格式的格式打印包含文件的完整路径
这将给出列出包含文件的绝对路径的 make 依赖项:
gcc -M showtime.c
如果您不希望系统包含(即 #include <something.h>
),则使用:
gcc -MM showtime.c
确定使用
g++ -E -dI ... (whatever the original command arguments were)
如果您的构建过程非常复杂...
constexpr static auto iWillBreak =
#include "where/the/heck/is/this/file.h"
这将(几乎肯定)在相关文件的顶部附近导致编译错误。那应该向您显示编译器看到的路径的编译器错误。
显然这比其他答案更糟糕,但有时这种 hack 很有用。
如果您使用 -MM
或相关选项之一(-M
等),您只会得到包含的标头列表,而没有所有其他预处理器输出(您似乎可以通过建议的 g++ -E -dI
解决方案获得)。
对于 MSVC,您可以使用 /showInclude
选项,这将显示包含的文件。
(这在 Michael Burr 对this answer的评论中有说明,但我想让它更明显,因此将其添加为单独的答案。)
可用性说明:编译器会将此信息发送到标准错误输出,在使用 Windows 命令提示符时,默认情况下似乎被抑制了。使用 2>&1
将 stderr 重定向到 stdout 以查看它。