自己的想法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
project
|--3rdparty
|--build #用于存放第三方库,每个第三库以单独目录的形式组织在3rdparty目录下
|--doc # 文档目录,存放项目相关的文档
|--include # 公共头文件目录,按模块划分子目录
|--lib # 外部依赖库目录
|--res # 资源目录,存放图片、音频、字体等资源文件
|--samples # 样例程序目录,展示项目的用法
|--src # 源代码目录,按模块划分子目录
|--test # 测试目录,存放单元测试和集成测试代码
|--tools # 工具目录,存放项目支撑工具
|--copyleft # 版权声明文件
|--CMakeLists.txt # CMake构建配置文件
|--README.md # 项目自述文件

其中src

1
2
下面可以为
include以及源文件
  • 3rdparty : 用于存放第三方库,每个第三库以单独目录的形式组织在3rdparty目录下。其中每个第三方目录下又有 includelib 分别存放第三方库的头文件和库文件。

参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
project_name
├── deploy
├── build
├── doc
├── 3rdparty
├── include
│ └── project_name
├── project_name
├── tools
├── scripts
├── platforms
├── test
├── LICENSE
├── CMakeLists.txt
├── build.sh
├── toolchain.cmake
├── .gitignore
├── readme.md
└── sample
  • deploy : 用于存放部署、交付的文件,其包含子目录bin、lib、include分别存放本项目最总生成的可执行文件、库文件以及对外所提供的头文件。
  • build : 用于存放build时cmake产生的中间文件,其包含子目录release和debug。
  • doc : 用于存放项目的相关文档。
  • 3rdparty : 用于存放第三方库,每个第三库以单独目录的形式组织在3rdparty目录下。其中每个第三方目录下又有 includelib 分别存放第三方库的头文件和库文件。
  • include/project_name : 用于存放每个模块以及整个工程对外的头文件。具体格式如下文。
  • project_name : 存放源码文件,以及内部头文件。具体格式如下文。
  • tools : 包含一些支持项目构建的工具,如编译器等,一般情况下使用软链接。
  • scripts : 包含一些脚本文件,如使用Jenkins进行自动化构建时所需要的脚本文件,以及一些用于预处理的脚本文件。
  • platforms : 用于一些交叉编译时所需要的工具链等文件,按照平台进行划分来组织子目录。每个子目录下存放 toolchain.cmake 等用于指定平台的文件。
  • test : 分模块存放测试代码。
  • LICENSE : 版权信息说明。
  • CMakeLists.txt : cmake文件。
  • build.sh : build脚本文件。
  • .gitignore : 指明git忽略规则。
  • readme.md : 存放工程说明文件。
  • sample : 存放示例代码。

参考2

C++项目的组织方式可能因为项目的规模、类型、目标平台等因素而有所不同,但是一般来说,一个良好的C++项目应该遵循以下几个原则1

  • 有一个清晰的目录结构,区分不同的部分,如源代码、头文件、文档、资源、测试、工具等。
  • 有一个可靠的构建系统,可以根据不同的环境生成相应的Makefile或者项目文件,如使用CMake、Makefile、Visual Studio等。
  • 有一个合理的依赖管理,避免不必要的头文件包含,使用相对路径或者预定义的变量来引用外部库或者模块。
  • 有一个完善的文档,说明项目的功能、用法、协议、注意事项等。
  • 有一个规范的代码风格,遵循一致的命名规则、缩进规则、注释规则等。

一个可能的C++项目目录结构示例12如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
project
|--build # 项目编译目录,存放临时文件和目标文件
|--dist # 分发目录,存放最终发布的可执行程序和运行支持文件
|--doc # 文档目录,存放项目相关的文档
|--include # 公共头文件目录,按模块划分子目录
|--lib # 外部依赖库目录
|--res # 资源目录,存放图片、音频、字体等资源文件
|--samples # 样例程序目录,展示项目的用法
|--src # 源代码目录,按模块划分子目录
|--test # 测试目录,存放单元测试和集成测试代码
|--tools # 工具目录,存放项目支撑工具
|--copyleft # 版权声明文件
|--CMakeLists.txt # CMake构建配置文件
|--README.md # 项目自述文件
#自己加的
|-bin 二进制文件

参见下面的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
project —+—build—+—debug
     |     |—release
     |—dist
     |—doc
     |—include—+—module1
     |      |—module2
     |—lib
     |—module1
     |—module2
     |—res
     |—samples—+—sample1
     |      |—sample2
     |—tools
     |—copyleft
     |—Makefile
     |—README

参考3

干货:构建C/C++良好的工程结构 - 知乎 (zhihu.com)

C++项目目录组织结构_xiaolongtuan的博客-CSDN博客

hattonl/cpp-project-structure: C++工程目录结构规范示例 (github.com)