如何让GCC在当前源文件目录之前的目录中搜索头文件?

Ale*_*x B 12 c++ gcc precompiled-headers

我在我的项目中使用GCC预编译头与多架构构建,但当我尝试将它放在与当前源目录不同的目录中时,事情就会崩溃.

该文件包含双引号,如果我将其更改为尖括号,它可以工作,但问题是我有很多其他项目使用相同的预编译头名称,因此将所有这些更改为尖括号是不可取的因为它可能会产生关于在Visual Studio构建相同文件中包含哪个头的歧义.

GCC在搜索路径之前搜索当前目录中的双引号包含.我可以使用-I-选项(例如-Ipch_dir.i686 -I-)来解决它,以便在当前目录之前搜索预编译的头目录,但不推荐使用此选项.海湾合作委员会建议我使用-iquote,但它没有同样的效果-I-.

所以问题是如何在不改变所有预编译头文件包括尖括号的指令和使用弃用的GCC开关的情况下使其工作?

Ale*_*x B 10

我找到了一个解决方法.

  1. 使用其他名称构建预编译头.例如,标题是a.h,原始预编译标题是pchdir.i686/a.h.gch,将其构建为

    gcc a.h -o pchdir.i686/a-precompiled.h.gch
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用GCC的-include开关确保重命名的标题包含其他任何内容之前(甚至在原始标题之前a.h),例如

    gcc -Ipchdir.i686 -include a-precompiled.h <other arguments> <source>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 源文件中的最终包含顺序将是:a-precompiled.h.gch,a.h我已经检查过-H.包含原始标头,但实际上并未处理,因为预编译标头具有相同的包含保护(通过#error在构建预编译的标头之后插入原始标头中进行验证).