对使用Unix的C ++中的单独目录的#include感到困惑

时间:2014-11-14 18:28:49

标签: c++ linux unix header c-preprocessor

使用Unix

对C ++中的单独目录感到困惑#include

2 个答案:

答案 0 :(得分:1)

您的问题部分为answered here,我们假设您正在使用GCCVisual Studio的相同比较):

  
      
  • #include <file>   此变体用于系统头文件。它在标准的系统目录列表中搜索名为file的文件。您可以使用-I选项将目录添加到此列表中(请参阅调用)。
  •   
  • #include "file"   此变体用于您自己的程序的头文件。它首先在包含当前文件的目录中搜索名为file的文件,然后在引用目录中搜索,然后搜索用于<file>的相同目录。您可以使用-iquote选项将目录添加到引用目录列表中。
  •   

因此,当您想要使用geometry.h加入#include <>时,您只需要使用其他gcc参数调用-I,您只需要决定“ deep “你想去吗:

gcc -I                               #include
/abs/path/ws/B/inc/Normal            <geometry.h>
/abs/path/ws/B/inc                   <Normal/geometry.h>
/abs/path/ws/B                       <inc/Normal/geometry.h>
/abs/path/ws                         <B/inc/Normal/geometry.h>
/abs/path                            <ws/B/inc/Normal/geometry.h>

如果你想使用#include "",你也可以这样做:

让我们假设您在/abs/path/ws/A/inc/your_header.h并希望加入/abs/path/ws/B/inc/Normal/geometry.h

#include                          path
"geometry.h"                      /abs/path/ws/A/inc/geometry.h
"../geometry.h"                   /abs/path/ws/A/geometry.h
"../../geometry.h"                /abs/path/ws/geometry.h
"../../B/geometry.h"              /abs/path/ws/B/geometry.h
"../../B/inc/geometry.h"          /abs/path/ws/B/inc/geometry.h
"../../B/inc/Normal/geometry.h"   /abs/path/ws/B/inc/Normal/geometry.h

如果这不起作用,您可能在不同的文件夹中,或者在某处有错字。

我个人会选择第一个解决方案(您可能希望以后在系统范围内使用您的库),这样您只需在makefile中更改一个-I标头而不编辑源代码。)

答案 1 :(得分:-1)

因为“PP / linear.h”被认为意味着我们在“ws / A / me / inc”所以...我们用../去“我”我们去“A”与../../ ..我们去“ws”然后“../../../B/inc/Normal/geometry.h”应该把我们带到理想的位置。