【问题标题】:Automatically use the directory as the project name in CMake在 CMake 中自动使用目录作为项目名称
【发布时间】:2012-09-02 21:18:05
【问题描述】:

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

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

project( ... )

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

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

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

【问题讨论】:

    标签: cmake


    【解决方案1】:

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

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

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

    当您提到“复制一个项目的整个目录作为另一个项目的起点”时,我假设您在复制时不包括构建树? CMake isn't really able to handle the build tree being moved.

    【讨论】:

    • 您应该使用 ${CMAKE_CURRENT_LIST_DIR} 而不是 ${CMAKE_SOURCE_DIR},否则如果您在另一个目录中有一个目录,则会出现错误。看链接:stackoverflow.com/questions/15662497/…
    • @Maks - 公平点,虽然CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_LIST_DIR 更合适,因为它指的是包含当前项目正在处理的CMakeLists.txt 的目录,而...LIST_DIR 会改变与include 通话。
    • 当我在不同的工作树中检出 2-3 个不同的分支并希望在 QtCreator 中切换它们时,这对我很有用 - 例如,比较/对比源和执行。然后它还允许我根据项目名称以编程方式将构建存放在不同的位置,即使它们都应该具有相同的项目名称。在本地,我可能会将官方项目名称与我的目录名称连接起来......
    【解决方案2】:

    我觉得CMAKE_CURRENT_LIST_DIR更适合这种情况

    get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
    string(REPLACE " " "_" ProjectId ${ProjectId})
    project(${ProjectId} C CXX)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多