工程目录结构设计
简介
该工程目录结构参考了opencv、pjproject、h323plus 等开源工程的结构,并结合以往的开发习惯,整理出的这份工程目录结构。注:目前这份结构只考虑了 C/C++ 的工程并且使用 CMake 来解决跨平台编译的问题。
结构展示
project_name
|- 3rdparty
*|- builds
|- linux
|- build.sh
|- vs20xx
|- project_name.sln
|- project_name
|- project_name.vcxproj
|- cmake
|- bin
|- lib
|- include
*|- src
|- module_1
|- module_2
|- config
|- readme.md
|- data
*|- test
|- ut
|- CMakeLists.txt
|- ut_xxxx.cpp
|- test
|- CMakeLists.txt
|- test_xxxx.cpp
|- sample
*|- scripts
*|- generate_version_file.sh
|- doc
*|- CMakeLists.txt
*|- version.h.in
|- version.c.in
|- VERSION
|- readme.md
注:带*
的是建议要存在的文件或文件夹
结构解释
readme.md
: 自述文件。3rdparty
: 第三方库的源代码。可以直接保存代码文件,也可以以子项目(git submodule
或者git subtree
)的形式存在,如果没有则不需要这文件夹。data
: 存放测试数据,可以没有。test
: 存放功能/单元测试代码,ut
存放的是单元测试代码,test
存放的是功能测试代码,文件夹下有编译对应测试工程的cmake文件。sample
: 存放示例代码。doc
: 存放文档(如果有类似 wiki 的系统管理文档则可以不需要此目录,但需要将链接放在readme.md
中)。builds
: 构建系统,里面根据不同平台再划分一级目录,分别存放对应的 shell 构建脚本(build.sh),注:如果不能通过根目录下通用的 CMakeLists.txt 来完成编译,则需要在这里存放独立的 cmake 或 makefile 等编译脚本。cmake
: 存放.cmake
文件,没有也可以不要这个目录src
: 总源码目录,内部分模块组织。 - 每个模块放在同名的文件夹下,模块内部存放该模块的主要功能逻辑代码,但不可以出现模块嵌套的情况。 - 包含内部头文件时,要从 ‘‘project_name’’ 开始拼写完整路径,防止头文件名称冲突,遵循 google c++ 编码规范。config
: 存放配置文件模板。scripts
: 存放脚本文件,如发布脚本、打包脚本等。include
: 存放所有的头文件,包括项目自身对外提供的头文件(仅针对库工程,可执行程序工程的头文件则不需要放在这里)需放在与库同名的文件夹下。lib
: 三/二方库的库文件。bin
: 工程的输出目录。CMakeLists.txt
: 通用 cmake 文件version.h.in
:version.h
的模板,scripts/generate_version_file.sh
通过这个模板和VERSION
文件生成version.h
文件VERSION
: 工程的版本号readme.md
: 自述文件,一般公司的项目可以不要这个