自动将目录用作CMake中的项目名称

tmp*_*rce 17 cmake

我很擅长使用CMake来管理我的构建系统,所以如果我是愚蠢的,这是个坏主意,请告诉我.

我希望能够设置我的cmakelists.txt文件,以便我这样做

project( ... )
Run Code Online (Sandbox Code Playgroud)

目录的名称自动成为项目名称.我想这样做是因为我觉得将一个项目的整个目录复制为另一个项目的起点很方便.但是,虽然我总是将目录重命名为有意义的东西,但我经常忘记更改project(name)cmakelists.txt文件的行,然后我最终在我的构建环境中打开了多个项目,这些项目具有相同的名称,这会让人感到困惑.

理想情况下,如果目录名称中有空格,则它们将被下划线替换.

CMake能做到吗?由于某种原因,我没有看到这是一个坏主意吗?

Fra*_*ser 12

您可以通过在CMakeLists.txt的开头添加以下内容来实现此目的:

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId})
Run Code Online (Sandbox Code Playgroud)

对于一次性项目,我没有看到这样做的问题,虽然我猜生产项目通常会有一个预定义的名称,该名称将在project命令中明确设置.

当你提到你"将一个项目的整个目录复制为另一个项目的起点"时,我假设你在复制时没有包含构建树?CMake 实际上无法处理正在移动的构建树.

  • 当我在不同的工作树中签出 2-3 个不同的分支并希望在 QtCreator 中切换它们时,这对我很有用 - 例如,比较/对比源代码和执行。然后,它还允许我根据项目名称以编程方式将构建存储在不同的位置,即使它们都应该具有相同的项目名称。在本地,我可能会将官方项目名称与我的目录名称连接起来...... (2认同)