har*_*are 89 c c++ gcc g++ include
如何判断g ++在哪里可以找到包含文件?基本上如果我
#include <foo.h>
Run Code Online (Sandbox Code Playgroud)
g ++将扫描搜索路径,使用任何include选项添加或更改路径.但是,在几天结束时,有没有办法告诉f ++的绝对路径g ++选择编译?如果在无数的搜索路径中有多个foo.h,则特别相关.
没有一种方法可以实现...有没有办法让g ++告诉我在包括默认值和所有包含选项之后它的最终搜索路径是什么?
Bul*_*net 96
g++ -H ...
Run Code Online (Sandbox Code Playgroud)
还将以一种格式打印包含文件的完整路径,该格式显示哪个标题包含哪个
Sod*_*ved 72
这将提供make依赖项,列出包含文件的绝对路径:
gcc -M showtime.c
Run Code Online (Sandbox Code Playgroud)
如果您不希望系统包含(即#include <something.h>),则使用:
gcc -MM showtime.c
Run Code Online (Sandbox Code Playgroud)
一定要用
g++ -E -dI ... (whatever the original command arguments were)
Run Code Online (Sandbox Code Playgroud)
如果您的构建过程非常复杂......
constexpr static auto iWillBreak =
#include "where/the/heck/is/this/file.h"
Run Code Online (Sandbox Code Playgroud)
这(几乎肯定)会导致相关文件顶部附近出现编译错误。这应该会向您显示编译器看到的路径的编译器错误。
显然这比其他答案更糟糕,但有时这种黑客是有用的。
如果您使用-MM或使用其中一个相关选项(-M等),您只需获得包含的标题列表,而不包含所有其他预处理器输出(您似乎从建议的g++ -E -dI解决方案中获得).