代码之家  ›  专栏  ›  技术社区  ›  Alex B

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

  •  12
  • Alex B  · 技术社区  · 14 年前

    我在我的项目中使用gcc预编译头文件进行多体系结构构建,但是当我尝试将其放在与当前源文件目录不同的目录中时,情况会有所不同。

    该文件包含双引号,如果我将其更改为尖括号,它会起作用,但问题是我有许多其他项目使用相同的预编译头文件名,因此不希望将所有项目都更改为尖括号,因为它可能会对同一文件的Visual Studio生成中要包含的头文件产生歧义。

    GCC searches current directory for double-quote includes before its search path . 我可以用 -I- 选项(例如) -Ipch_dir.i686 -I- ,以便在当前目录之前搜索预编译头目录,但不推荐使用此选项。GCC建议我使用 -iquote 但其效果与 -我- .

    所以问题是,如何使它在不更改所有预编译头(包括对尖括号的指令)和使用不推荐使用的gcc开关的情况下工作?

    1 回复  |  直到 13 年前
        1
  •  10
  •   Alex B    14 年前

    我找到了一个解决办法。

    1. 使用其他名称生成预编译的头。例如,标题是 a.h ,原始预编译头是 pchdir.i686/a.h.gch 把它建成

      gcc a.h -o pchdir.i686/a-precompiled.h.gch
      
    2. 使用海合会 -include 切换以确保包含重命名的头 之前 其他(甚至在原版之前 A. ),例如

      gcc -Ipchdir.i686 -include a-precompiled.h <other arguments> <source>
      
    3. 源文件中的最终包含顺序为: a-precompiled.h.gch , A. ,我查过了 -H . 包含原始头,但实际上未处理,因为预编译头具有相同的包含保护(通过插入 #error 在构建预编译的头文件之后)。