包含多个项目的CMake(C ++)存储库的目录组织


12

我想为存储在单个(git)存储库中的一组相关但独立的C ++项目的组织提供一些建议。这些项目使用CMake。

对于一个简化的示例,我们假设有两个项目A和B,A取决于B。大多数开发A的人都会通过包装系统获得B。因此,它们只能编译A。但是,我们应该允许开发人员分别或一起编译A和B(并安装)。

这是一个建议:

└── Repo1
    ├── CMakeLists.txt (1)
    ├── A
       ├── CMakeLists.txt (2)
       ├── include
          ├── aaa.h
          ├── aaaa.h
          └── CMakeLists.txt (3)
       └── src
           ├── aaa.cpp
           ├── aaaa.cpp
           └── CMakeLists.txt (4)
    ├── B
       ├── CMakeLists.txt (2)
       ├── include
          ├── bbb.h
          ├── bbbb.h
          └── CMakeLists.txt (3)
       └── src
           ├── bbb.cpp
           ├── bbbb.cpp
           └── CMakeLists.txt (4)
    └── test
        ├── CMakeLists.txt (5)
        └── testaaaa.cpp

(1)定义所有项目(如果有)的公共cmake变量,并包括子目录。(2)定义项目本身和项目所需的cmake变量。(3)定义要安装的标题和编译所需的标题。(4)配置库和二进制文件。(5)配置测试可执行文件和测试用例。

据我了解,每个项目都应产生一个XXXConfig.cmake文件并将其安装在/ usr / local / share / cmake中。阅读CMake文档时,编写这些文件似乎非常复杂。

你怎么看 ?结构合理吗?

您是否碰巧有这样一个项目集的可行示例?


我认为您可能在这里过头了-我们刚刚为一个带有一个依赖库项目的应用程序介绍了cmake,到目前为止,CMakeLists.txt每个项目只对一个文件感到满意:(A/CMakeLists.txt应用程序)包含B/CMakeLists.txt(库)using add_subdirectory(...)
ssc

Answers:


12

经过大量的阅读和测试之后,我做了一个基本的C ++演示项目,演示了CMake,CTest + boost.test,CPack和Doxygen的用法,并使用了我在问题中提到的或多或少的组织。

该项目显示了如何使子项目具有依赖性,如何编译整个存储库或仅编译子项目,如何打包,如何测试以及如何生成文档。

看到这里:https : //github.com/Barthelemy/CppProjectTemplate

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.