是否有任何文章或建议如何在项目中组织文件层次结构?我对如何命名文件夹,分离源和标题感兴趣。
我有用C ++编写的项目,一个使用它的库和项目。库有许多组件,它们彼此分开,但有些组件使用公共文件。我应该为他们创建目录吗?
我很高兴听到所有建议。
答案 0 :(得分:6)
不要将标题和源文件拆分为单独的文件夹。它只是添加额外的文件夹级别。
充其量它完全没用;如果您正在寻找“widget.h”,即使旁边有“widget.cpp”,您也可以轻松找到它。在最坏的情况下,它相当适得其反 - 例如当你编辑“widget.h”并发现你还需要更新“widget.cpp”。
答案 1 :(得分:3)
将名称空间保存在单独的文件夹中是很好的。嵌套命名空间的方式与嵌套在项目中的方式相同。例如,如果你有:
namespace Foo{ namespace Bar{ } }
然后你想要在Bar
命名空间中找到任何对象
{Foo's parent folder}\Foo\Bar\{how you're organizing code at this level}
我们使用头文件的include文件夹,.cpp的源代码,单元测试的测试文件夹和编译代码位的目标文件夹。我们将它们分开的原因是它可以更容易地将代码打包到我们的脚本中。你总是会绕过标题,你不会绕过源头。 (Here是另一个讨论分离头文件/源文件的SO线程。这是一个偏好的东西。)
如果有帮助的话,这是Google的风格指南的link。
答案 2 :(得分:2)
我通常让子目录与我的命名空间匹配
+ Project root
+ <project_name> // namespace project
- sub_dir_1 // namespace project::sub_dir_1
- sub_dir_2 // namespace project::sub_dir_2
我只添加“Project root”作为附加的包含路径,因此include包含以下形式:
#include "project/sub_dir_1/a.h"
#include "project/sub_dir_2/b.h"
由于源和标头通常根据它们包含的类命名,因此可以从包含路径推导出整个限定名称:
在project::sub_dir_1::a
project/sub_dir_1/a.h
a.c
包括a.h
(提供的相对路径)
a.h
中加入b.h
,我会使用绝对路径(从project/
root开始)