【发布时间】:2021-07-09 23:35:00
【问题描述】:
我之前问过一个类似的问题,但我猜它的措辞很糟糕,所以这里尝试 2。
我的项目文件夹中有以下结构:
-
mainLib-
includemainLib.h
-
CMakeLists.txt-
project1project.cpp
-
project2project.cpp
- ...
-
projectNproject.cpp
所有项目 (project1, ... projectN) 使用相同的 mainLib,我希望它们也使用根目录中相同的 CMakeLists.txt 文件,而无需在每个项目中创建单独的文件文件夹 - 并且出于必要(因为可以访问 mainLib) - 从主目录中的 CMakeLists.txt 调用它们。
重要的事情:项目的数量可以改变,所以我想构建它们,将目录名称传递给 CMakeLists.txt 或本着这种精神的东西,而不是必须先验地定义它们CMakeLists.txt.
在运行主CMakeLists.txt 后,我只想:
-
projectNproject.cppproject.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@。再说一次:只需尝试来实现你想要的。