21

我在使用 CMake 管理我的构建系统方面还很陌生,所以如果我很愚蠢并且这是一个坏主意,请告诉我。

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

project( ... )

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

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

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

4

2 回答 2

21

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

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId})

我认为对一次性项目执行此操作没有问题,尽管我猜生产项目通常会有一个预定义的名称,该名称将在project命令中显式设置。

当您提到您“复制一个项目的整个目录作为另一个项目的起点”时,我假设您在复制时不包括构建树?CMake并不能真正处理正在移动的构建树

于 2012-09-10T03:28:30.447 回答
3

我认为 CMAKE_CURRENT_LIST_DIR 更适合这种情况

get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C CXX)
于 2015-04-24T12:51:01.897 回答