#include 头文件位于不同的目录结构中
#include Header Files When They Are In a Different Directory Structure
我已经进行了一些搜索,并在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 提供类似的选项。
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 大小相等但成员数量不同的结构之间的性能差异
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何泛化作用于不同类型的向量的函数?
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- 具有匿名结构的不同位映射
- 32 位和 64 位的结构大小不同
- 将相同的功能应用于不同大小的N数组的每个元素
- Clang和MSVC报告了同一结构的不同“大小”
- 模板参数适用于不同的STL容器
- 提升精神:解析列表到结构的不同字段
- 如何比较结构中不同索引的元素
- 对 stl 数据结构使用不同的接口
- 如何使此代码适用于不同计算机上的服务器和客户端
- std::vector或其他数据结构中不同类型的对象
- QT5:如何将一个样式表应用于不同的小部件
- 结构偏移不同
- c++.结构在不同平台上的填充/对齐和布局兼容性的自动检查
- emacs:类和结构的不同缩进
- 无法将std::set_interaction应用于具有公共字段的不同类型的结构