#include处于不同目录结构中的头文件

时间:2012-05-21 21:04:27

标签: c++ directory header-files

我已经做了一些搜索,并找到了在C ++中包含头文件的正确方法的类似线程,但是他们都没有回答这个问题。

我知道为了在另一个文件夹中包含头文件,您只需使用以下语法:

#include "../myFolder/myFile.h"

但是当文件在不同的目录结构中有点远时呢? 例如,如果保证满足以下内容:

当前目录= / f1 / f2 / f3 / f4 / f5 / myFile.cpp

所需的标题目录= / f1 / d2 / d3 / d4 / d5 / d6 / myHeader.h

我知道您可以设置“其他包含目录”属性或使用make文件,但我想知道是否有办法从#include语句中执行此操作。

2 个答案:

答案 0 :(得分:10)

".."放入#include通常被认为是丑陋且无法维护的。

您正在使用的每个连贯库(例如boost)都有一个头文件层次结构根,您应将其放在“其他包含目录”属性中。对于提升,它就像是

`C:/lib/boost_1_49`

在此目录下,您通常会找到一个名为boost的目录,其中包含所有标头。这带来了所有提升标题始于的惯例:

#include <boost/bla/bla.hpp>

这也适用于您正在编写的项目。您应该确定其标题的最佳根目录,并从那里开始所有包含 此规则的唯一例外应该是位于同一目录中的标头。这些只能作为文件名#include "same-dir-header.h"

包含在内

您还应该在包含""<>之间做出改变。引号应该是项目中的东西,尖括号应该是外部库(或者有些人会有它 - OS和C运行时库)

答案 1 :(得分:1)

要完成@shoosh的答案,您应该告诉编译器那些“其他”头文件在哪里。使用Windows上的gcc,如果它们位于c:\ path \ to \ library中,则添加-I选项

-Ic:\path\to\library

请注意路径中的空格,如果位置为c:\my path\to\library,则:

-I"c:\my path\to\library"

其他编译器将在命令行或通过IDE提供类似的选项。