覆盖默认标头搜索路径

cob*_*bal 8 c++ gcc

我正在尝试在一个我无法控制的系统上编译程序.

我遇到的问题是包含目录看起来像这样:

/usr/include:
gmpxx.h gmp.h

/usr/local/include:
gmp.h
Run Code Online (Sandbox Code Playgroud)

在我的cpp文件中,我使用

#include <gmpxx.h>
Run Code Online (Sandbox Code Playgroud)

并且这会找到正确的文件/usr/include,但是当gmpxx.h包含gmp.h时,它会将其拉出来/usr/local/include,这会破坏构建.

现在,我看到了3个非常丑陋的解决方案

  1. 在我的cpp文件中,添加#include </usr/include/gmp.h>
    具有绝对包含路径是非常丑陋和不可移植的,我认为这种事情应该属于Makefile而不是源.

  2. -nostdinc标志添加到我的makefile中,并手动指定包含路径

  3. 为我真正想要的库创建本地符号链接,然后执行本地包含(#include "gmp.h")

有没有更好的解决方案,我错过了?

rua*_*akh 14

包含的搜索路径按以下顺序进行:

因此,您可以使用前两个中的任何一个(无论哪个更好/更方便您的目的).

  • 我还没有尝试过 CPLUS_INCLUDE_PATH,但是 -I 的问题是,如果你在标准默认值中给它一个目录,它会忽略顺序并且不会把它放在第一位。 (2认同)
  • @cobbal:我明白你在说什么;是的,我链接到的文档中提到了这一点。它提到了两种解决方法:“-nostdinc”(你已经知道了,并且觉得很难看——我同意你的观点)和“-isystem”(参见http://gcc.gnu.org/onlinedocs/ gcc-4.3.2 //gcc/Preprocessor-Options.html )。 (2认同)