使用相同的 CMakeLists.txt 构建多个项目

时间:2021-07-09 23:35:00

标签: c++ cmake

我之前问过一个类似的问题,但我想它的措辞很糟糕,所以这里尝试 2。

我的项目文件夹中有以下结构:

  • mainLib
    • include
      • mainLib.h
  • CMakeLists.txt
  • project1
    • project.cpp
  • project2
    • project.cpp
  • ...
  • projectN
    • project.cpp

所有项目 (project1, ... projectN) 都使用相同的 mainLib,我希望它们也使用相同的 CMakeLists.txt 根文件目录,而不在每个文件夹中创建一个单独的文件夹 - 并且出于必要(因为访问 mainLib) - 从主目录中的 CMakeLists.txt 调用它们。

重要事项:项目的数量可以改变,所以我想构建它们,将目录名称传递给 CMakeLists.txt 或本着这种精神的东西,而不是必须定义它们CMakeLists.txt 中的先验。

运行主 CMakeLists.txt 的效果是:

  • projectN
    • project.cpp
    • project.o

在每个项目目录中。

使 CMakeLists.txt 从 *.cpp 目录吞下任何名称的 projectN 文件并使用 *.cpp 文件的名称调用输出二进制文件的奖励积分。

奖励积分:告诉我如何在 cmake 安装完成后使构建文件夹自动消失。

Here's my previous attempt, that I've mentioned at the beginning, that I think is likely to break

1 个答案:

答案 0 :(得分:1)

这不是 CMake 的工作方式。

  1. 您应该在每个包含源文件的文件夹中都有一个 CMakeLists.txt。有一些技巧可以减少 CMakeLists.txt 文件的数量,但它们只是技巧,如果做得不好,这可能会导致代码更多、可读性降低甚至是细微的错误。

  2. 您应该进行外源构建。这意味着您必须在项目的根目录中或什至外部创建一个文件夹。然后在那里调用 cmake ,最后一个参数是源代码根目录的路径。然后 CMake 生成的所有内容都位于 build 目录下方,并且您的源目录不会受到污染。安装完成后,删除build目录就可以实现了。

对于您关于库和 cpp 内容的问题,它们可能是他们自己的好问题。我首先想解决您对 CMake 的误解。您不应该针对您的构建系统工作,而应让它为您工作。

相关问题