将标题放在项目的"include"子目录中有什么好处吗?
Is there any advantage to putting headers in an "include" subdir of the project?
我注意到流行的C++库Cinder的源文件有单独的src
和include
文件夹,相应地包含*.cpp
和*.h
文件。这样做比简单地将每个.cpp与其匹配的.h放在同一目录中有好处吗?
以这种方式构建代码通常更容易,尤其是当您要将其导出为带有预编译库的API时。(公共)头然后成为您的API,将它们保存在与源代码分开的地方是有意义的,因为这是必须与库一起分发的代码部分。
可用选项为
module/*.{cpp,h}
-最好用于相关文件的空间位置,最坏的情况是需要应用严格的API焦点(向后兼容性、版本与补丁等)module/{include/*.h, src/*.{cpp,h}}
-适用于API焦点,适用于空间局部,我的首选include/module/*.h,src/module/*.{cpp,h}
-最适合API焦点,对空间局部性不是很好
没有真正的利弊,一般来说也没有。在设计API时(与应用程序相比),您必须在库中提供一组包含,而这种特殊的头文件使开发人员选择将它们与文件系统中的源文件分离的解决方案。
我不认为一个组织比另一个更好,但我可以给你两个建议,帮助你决定什么对你的项目最有利:
-
尽量简化文件层次结构。当涉及到项目配置、安装脚本和版本控制时,嵌入较少的文件夹就不那么麻烦了。
-
最重要的不是头文件的位置,而是它们的包含方式:
- <>或">
- 从内部源文件还是从使用您的头的外部代码
- 是否使用指向它们的路径或直接使用文件名
在调用#include
时,了解您希望如何编写页眉,可以帮助您决定将它们放在更舒适的位置。
就我而言,我并不真正喜欢标题/源分隔。有些头不打算由我的API公开,所以我要么把所有的源都放在一个文件夹中,要么我更喜欢公共/私有分离。
相关文章:
- 什么是"#include <boost/functional/hash.hpp> "?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- #include "MyClass.h" 和 #include ".myclass.h" 有什么区别
- 是 std::include 中的错误还是我做错了什么
- 将标题放在项目的"include"子目录中有什么好处吗?
- 有什么方法可以在C #include语句中使用通配符
- 我什么时候使用 #include<string>?
- 一个只包含一个#include的.cpp文件有什么意义
- 来自 C 的指令 #include 和来自 C++ 的指令之间有什么区别吗?
- #include <file> #include < file.h> - 有什么区别?
- #include 和复制粘贴有什么区别?
- swig接口文件的正确sstream include路径是什么
- 如何判断哪个#include提供了什么对象
- #include<> 和 #define " " 有什么区别
- 如果#include无法找到文件会发生什么
- 在include语句中斜杠是什么意思?
- 在源文件中指定include前缀与在编译器的搜索路径参数中指定include前缀的优缺点是什么
- c++中using和include的区别是什么?
- 什么时候不使用头文件中的include保护
- 当我在.cpp文件中复制#include时会发生什么?