这个问题已经在这里有一个答案:
- 单独的“包括”和应用程序级代码“SRC”文件夹? [关闭] 10个答案
我知道,这是常见的C / C ++项目将页眉目录中的文件,如include
和实施一个单独的目录,如src
。 我一直在玩弄不同的项目结构,我想知道是否有这方面的任何客观原因还是纯粹约定?
这个问题已经在这里有一个答案:
我知道,这是常见的C / C ++项目将页眉目录中的文件,如include
和实施一个单独的目录,如src
。 我一直在玩弄不同的项目结构,我想知道是否有这方面的任何客观原因还是纯粹约定?
公约的原因之一 - 大部分的时间,有效的抽象,你只关心接口,并希望有更容易只看标题。
这虽然不是唯一的原因。 如果你的项目模块组织,你极有可能包括在不同的模块的一些标题,并希望您的include目录中有被清洗的其他的“噪音”的文件。
另外,如果你打算重新分配你的模块,你可能想隐藏实现细节。 从一个单一的文件夹没有什么是简单else和分布集管 - 所以,你只提供头文件和二进制文件。
还有,我其实更喜欢的选择 -大众头在一个单独的文件夹中去(这包含最小的界面-没有实现细节可见任何),和私有头和执行文件是分开的(可能,但不一定是在单独的文件夹) 。
我喜欢把它们到同一个目录。 原因:
接口规范文件(S),和实现该接口的源文件(S)所属的项目的同一部分。 假设你有subsystemx
。 然后,如果你把subsystemx
文件在subsystemx
目录, subsustemx
自成体系。
如果有很多包含文件,确保您可以做subsystemx/include
和subsystemx/source
,但我认为,如果你把定义class Foo
在foo.hpp
和foo.cpp
你当然希望看到他们两人(或者至少在一个目录列表这样做很容易)在一起的可能性。 寻找到相关的所有文件foo
ls foo*
找到所有的实现文件:
ls *.cpp
查找所有申报文件:
ls *.hpp
简单干净。
它使您的文件夹结构清洁。 头文件和源文件是明显不同的,并用于不同的东西,因此是很有意义将它们分开。 从这个角度的视图的问题基本上是一样的:“ 为什么你们的源文件和文档走在不同的文件夹 ”? 计算机是你放什么东西在文件夹和你做什么高度无关,文件夹 - 大部分 - 只是一个方便的抽象的,因为我们人类解析,专卖店的方式,和召回信息。
还有一个事实,即头文件中还是有益的,你已经建立后 , 也即如果你正在建设一个图书馆,有人想使用该库,他们需要的头文件-而不是源文件-所以它使捆绑这些头文件了-抓住的东西bin
,并在东西include
和没有经过过筛src
-容易得多。
除了(?值得商榷)有用的东西保持有序,有用的其他项目等,其中有一个很中立,客观的优势:编译时间。
特别是,在一个大的项目有一大堆的文件,这取决于标题搜索路径(.C / .cpp文件使用#include "headername.h"
,而不是#include "../../gfx/misc/something/headername.h"
,并通过正确的参数编译器能够吞下)你大大减少了需要由编译器在搜索正确的头扫描的条目数。 由于大多数编译器编译每个文件单独启动,它们需要在文件中的包括路径上的列表读取,并寻求各编译的文件正确头。 如果有一堆.C,即.o和其他不相关的文件包括路径上,发现了包括其中需要按比例延长。
总之,有几个原因:
看看文章组织代码文件中C和C ++这也解释得很好。