9

我已经进行了一些搜索,并在 C++ 中包含头文件的正确方法上找到了类似的线程,但没有一个能完全回答这个问题。

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

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

但是,当文件位于稍微远离的不同目录结构中时呢?例如,如果保证以下内容为真:

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

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

我知道您可以设置“附加包含目录”属性或使用生成文件,但我想知道是否有办法从#include语句中做到这一点。

4

2 回答 2

11

投入通常被认为是丑陋且不可维护的 ".."#include

您使用的每个连贯库(例如 boost)都有一个头文件层次结构的根,您应该将其放入“附加包含目录”属性中。对于提升,它类似于

`C:/lib/boost_1_49`

在此目录下,您通常会找到一个名为boost所有标题所在的目录。这带来了所有 boost headers 开头的约定:

#include <boost/bla/bla.hpp>

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

您还应该区分包含 with""<>。引号应该是你项目中的东西,尖括号应该是外部库(或者有些人会这样 - OS 和 C 运行时库)

于 2012-05-21T21:12:35.283 回答
4

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

-Ic:\path\to\library

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

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

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

于 2012-05-22T06:46:33.213 回答