【问题标题】:Build many projects with the same CMakeLists.txt [closed]使用相同的 CMakeLists.txt 构建许多项目 [关闭]
【发布时间】:2021-07-09 23:35:00
【问题描述】:

我之前问过一个类似的问题,但我猜它的措辞很糟糕,所以这里尝试 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 吞下 projectN 目录中任意名称的 *.cpp 文件并使用 *.cpp 文件的名称调用输出二进制文件的奖励积分。

加分项:告诉我如何让构建文件夹在 cmake 安装完成后自动消失。

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

【问题讨论】:

  • 我通常为每个可执行文件和每个库都有一个根 CMakeLists.txt 和一个 CMakeLists.txt。使用库没有问题。只有根 CMakeLists.txt 有 project() 所有其他 CMakeLists.txt 没有。
  • @drescherjm 这就是我注意到的,但我内心的极简主义者告诉我它可以在没有那些额外文件的情况下完成。
  • @Ranza 你内心的极简主义者是对的。您可以在其各自的根目录中为所有项目创建 CMakeLists.txt 文件,然后您可以在存储所有项目的目录中创建一个 bash 脚本,该脚本为所有项目调用 CMake。如果您喜欢此解决方案,我可以将其发布为答案
  • 如果您给出的问题与previous one 的问题相同,那么您为什么不编辑上一个问题呢?这是 Stack Overflow 上的正确方法。您之前的问题至少有一些代码,当前的问题没有代码,这很糟糕。你再次提出许多问题。 (嗯,实际上没有问题,这些是要求)。只需提出一个要求,然后尝试应用它。成功后,进入下一个。失败时询问,但也要展示你的尝试。
  • 您想在同一个CMakeLists.txt 中描述多个项目(实际上是可执行文件)吗? - 没问题,只需将它们添加到同一个CMakeLists.txt。如果您认为添加一个新项目需要许多复制粘贴的代码,那么将该代码模式化为宏/函数,并为每个项目调用它。 “项目的数量可以改变,所以我想构建它们,将目录名称传递给 CMakeLists.txt 或本着这种精神” - 没问题,您可以为 cmake 创建一个参数并在您的 @ 中检查该参数987654351@。再说一次:只需尝试来实现你想要的。

标签: c++ cmake


【解决方案1】:

这不是 CMake 的工作方式。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多