我之前问过一个类似的问题,但我想它的措辞很糟糕,所以这里尝试 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
答案 0 :(得分:1)
这不是 CMake 的工作方式。
您应该在每个包含源文件的文件夹中都有一个 CMakeLists.txt。有一些技巧可以减少 CMakeLists.txt 文件的数量,但它们只是技巧,如果做得不好,这可能会导致代码更多、可读性降低甚至是细微的错误。
您应该进行外源构建。这意味着您必须在项目的根目录中或什至外部创建一个文件夹。然后在那里调用 cmake
,最后一个参数是源代码根目录的路径。然后 CMake 生成的所有内容都位于 build 目录下方,并且您的源目录不会受到污染。安装完成后,删除build目录就可以实现了。
对于您关于库和 cpp 内容的问题,它们可能是他们自己的好问题。我首先想解决您对 CMake 的误解。您不应该针对您的构建系统工作,而应让它为您工作。