使用 CMake 配置多个项目

问题描述 投票:0回答:0

我正在做一个项目,我们称之为

A
。它带有自己的
CMakeLists.txt
。该项目还依赖于其他两个项目
B
C
。每个人都有自己的
CMakeLists.txt
。项目
C
也依赖于项目
D
,它也有自己的
CMakeLists.txt
。项目
B
C
D
也是我的项目,它们作为单独的 GitHub 存储库驻留。他们制作了项目
A
需要的一些库。我想配置
CMake
以允许我:

  1. 用一条命令编译一切。通常,我会先为每个项目做
    cd B/ && cmake . && make .
    ,然后再为
    A
    做同样的事情。我的目标是像
    cd A/ && cmake . && make .
    .
  2. 能够为我想要的任何项目编写代码,他们会重新编译所有内容。同样,我拥有所有项目,它们都作为 GitHub 子模块存在。
  3. 依赖项只有在安装后才有效。我不想那样做,因为它已经造成了足够的混乱。我只想分别从源代码树和
    build
    目录中直接读取我的头文件和库。
  4. 可选择为每个项目设置不同的构建配置。如果我只在项目
    A
    上工作,我希望它处于调试状态,但是
    B
    应该处于发布状态(并且与其他依赖项无关)。

我已经尝试使用 Visual Studio Code 的

cmake-tools
。它创建了一个名为
build
的单独目录,但这意味着所有依赖项的树外编译并且它对除
A
之外的所有项目都失败。重新配置所有
CMakeLists.txt
以指向
build
是一项繁琐的工作,我仍然无法修复所有错误。我继承了
B
C
D
的代码库,不想弄乱他们的 CMake 配置。

这是我当前的目录结构:

A/
├── build/
├── CMakeLists.txt
│ 
├── B/
│   └── CMakeLists.txt
├── C/
│   ├── CMakeLists.txt
│   └── D/
│       └── CMakeLists.txt
|
├── include/
├── src/
│   └── CMakeLists.txt
└── test/
    └── CMakeLists.txt

我的目标可以实现吗?我的源代码树结构是否正确?我能做些什么来解决这些问题吗?

c++ cmake compilation
© www.soinside.com 2019 - 2024. All rights reserved.