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

#include Header Files When They Are In a Different Directory Structure

本文关键字:结构 于不同 文件 #include      更新时间:2023-10-16

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

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

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

但是,当文件位于不同的目录结构中稍远时呢?例如,如果保证满足以下条件:

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

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

我知道您可以设置"其他包含目录"属性或使用 make 文件,但我想知道是否有办法从 #include 语句中做到这一点。

".."放在#include中通常被认为是丑陋和不可维护的。

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

`C:/lib/boost_1_49`

在此目录下,您通常会找到一个名为 boost 的目录,所有标头都位于该目录。这带来了所有提升标头都以以下内容开头的约定:

#include <boost/bla/bla.hpp>

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

您还应该区分包含 ""<> 。引号应该是项目中的东西,尖括号应该是外部库(或者有些人会拥有它 - 操作系统和 C 运行时库(

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

-Ic:pathtolibrary

当心路径中的空格,如果位置c:my pathtolibrary,则:

-I"c:my pathtolibrary"

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