我在我的项目中使用GCC预编译头与多架构构建,但是当我尝试将它放在与当前源目录不同的目录中时,事情就会崩溃。
该文件包含双引号,如果我将其更改为尖括号,它可以工作,但问题是我有很多其他项目使用相同的预编译头名称,因此将所有项目更改为尖括号这是不可取的,因为它可能会产生关于在Visual Studio构建相同文件中包含哪个头的歧义。
GCC searches current directory for double-quote includes before its search path。我可以使用-I-
选项(例如-Ipch_dir.i686 -I-
)来解决它,以便在当前目录之前搜索预编译的头文件目录,但不推荐使用此选项。 GCC建议我使用-iquote
,但它与-I-
的效果不同。
所以问题是如何在不改变所有预编译头文件包括尖括号的指令和使用不推荐使用的GCC开关的情况下使其工作?
答案 0 :(得分:10)
我找到了解决方法。
使用其他名称构建预编译的标头。例如,标题是a.h
,原始预编译标题是pchdir.i686/a.h.gch
,将其构建为
gcc a.h -o pchdir.i686/a-precompiled.h.gch
使用GCC的-include
开关确保重命名的标头包含在之前其他任何内容(甚至在原始a.h
之前),例如
gcc -Ipchdir.i686 -include a-precompiled.h <other arguments> <source>
源文件中的最终包含顺序为:a-precompiled.h.gch
,a.h
,我已使用-H
进行了检查。包含原始标头,但实际上并未处理,因为预编译标头具有相同的包含保护(在构建预编译的标头后,通过在原始标头中插入#error
进行验证)。