工程目录结构设计

发布于:2021-07-28
阅读时长:2分钟

简介

该工程目录结构参考了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.inversion.h 的模板,scripts/generate_version_file.sh 通过这个模板和 VERSION 文件生成 version.h 文件
  • VERSION: 工程的版本号
  • readme.md: 自述文件,一般公司的项目可以不要这个
最后更新于:2024-03-27