/cmakeyixqy

Mordern CMake Mordern CXX Project Template

Primary LanguageC++MIT LicenseMIT

More Mordern CMake Project Template

This cmakeyixqy project template (fork) upstream repository cmake-init may be updated and you want to integrate the changes, you can update the required modules selectively, cmake-init thx.

一厢情愿的目录结构

ProjectRoot
    +- LICENSE
    +- README.md
    +- CMakeLists.txt   最顶层CMakeLists.txt, 只包含对整体工程的配置, 不涉及具体模块
    +- <工程名称>-config.cmake    在这里配置工程包含的具体模块, 该文件会被最顶层CMakeLists.txt 引用
    +- cmake   包含工程自定义的cmake模块和脚本
         +- modules
               +- ClangTidy.cmake
               +- CppCheck.cmake
               +- ...
         +- scripts 实现cmake应用功能的shell脚本
    +- data    应用程序运行时所依赖的配置数据
    +- deploy
         +- README.md
         +- CMakeLists.txt 使用CPack打包应用该配置
         +- packages
             +- pack-<工程名称>.cmake    工程打包配置
         +- dependencies 打包时其他依赖, 例如ubuntu常常需要从ubuntu-ppa下载包  
    +- docs
         +- README.md
         +- CMakeLists.txt
         +- api-docs
             +- CMakeLists.txt  配置参数DEPENDS 应该包含了所有 targets
             +- doxyfile.in    生成接口文档, INPUT tag (list of doxygen annotated sources)
         +- manual
             +- CMakeLists.txt
             +- <工程名称>.tex
    +- third-party    第三方提供的程序库/文件/资料 
         +- boost_1_72_0
             +- include 
             +- lib
             +- bin 
         +- spdlog 
         +- rapidjson
    +- source
         +- README.md  简要说明各模块,例如哪些是命令行可执行程序模块,哪些是GUI可执行程序模块,哪些是静态库,动态库, 代码检查使用的哪种linter
         +- CMakeLists.txt 工程下开发的模块列表(add_subdirectory), 还有适用于所有模块的配置
         +- version.h.in 支持configure_file()方法据其生成工程版本信息(宏定义)头文件 支持编码时候引入 `#include "<project>/<project>-version.h"`
         +- ProjectModule1   工程下开发实现的模块1
              +- CMakeLists.txt 适用于该模块的配置, 可以单独使用cmake根据CMakeLists.txt配置生成模块目标
              +- include
              +- src
         +- ProjectModule2   工程下开发实现的模块2
         +- baselib   工程下开发实现的模块示例baselib
              +- CMakeLists.txt 
              +- include
              +- src
         +- fiblib   工程下开发实现的模块示例fiblib
              +- CMakeLists.txt 
              +- include
              +- src
         +- examples 工程下开发实现的模块示例examples
              +- CMakeLists.txt 
              +- fibcmd
                  +- CMakeLists.txt 
              +- fibgui
                  +- CMakeLists.txt 
         +- ...
         +- ...
         +- ...
         +- ProjectModuleN   工程下开发实现的模块N
         +- test   单元测试
             +- CMakeLists.txt 
             +- googletest  单元测试依赖的 gtest 库
             +- ProjectModule1单元测试
                 +- CMakeLists.txt 
                 +- src
             +- ProjectModule2单元测试
                 +- CMakeLists.txt 
                 +- src
             +- fiblib-test  模块fiblib的单元测试
                 +- CMakeLists.txt 
                 +- src
                     +- main.cpp
                     +- fibonacci_test.cpp
             +- ...
             +- ...
             +- ...
             +- ProjectModuleN单元测试
                 +- CMakeLists.txt 
                 +- src

替换样例工程名称(cmakeyixqy/CMAKEYIXQY)为特定工程名称

参见 检查表 ADAPT.md

构建

  1. 生成目标构建系统待构建工程
cd build && cmake ..
  1. 使用构建系统构建
cd build && cmake --build .
or
cd build && cmake --build . --config Release

Appendix

  1. cmake-examples
  2. modern-cmake-practice