我想为存储在单个(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文档时,编写这些文件似乎非常复杂。
你怎么看 ?结构合理吗?
您是否碰巧有这样一个项目集的可行示例?
CMakeLists.txt
每个项目只对一个文件感到满意:(A/CMakeLists.txt
应用程序)包含B/CMakeLists.txt
(库)usingadd_subdirectory(...)
。