【问题标题】:Getting the name of the cmake build directory excluding the full path获取不包括完整路径的 cmake 构建目录的名称
【发布时间】:2022-11-11 02:42:13
【问题描述】:

我正在使用 CMake 3.23,构建目录是 C:\Dev\MyProject\LibA\cmake-build-debug-vs${CMAKE_CURRENT_BINARY_DIR} 提供构建目录的完整路径。有没有办法只得到cmake-build-debug-vs

CMake 是否有一个仅用于构建目录名称的专用变量?我尝试了几个内置变量,它们都返回完整路径。

【问题讨论】:

  • 据我所知,CMake 没有专门的变量来包含构建树中的相对路径。如果你想要相对路径,那么你可以使用file(RELATIVE_PATH) 命令来计算它们。请注意,CMAKE_CURRENT_BINARY_DIRCMAKE_BINARY_DIR 的差异可能不止一个目录。例如。通过add_subdirectory() 调用包含的CMakeLists.txt 可以单独调用add_subdirectory()

标签: cmake


【解决方案1】:

如果您只想要最新路径组件的名称(文件名或目录;取决于最后一个组件是什么),那么您可以使用 CMake 的相对新的 path features

这将提取cmake-build-debug-vs 并将其存储到变量MY_BUILD_PATH_NAME 中。

cmake_path (GET CMAKE_CURRENT_BINARY_DIR PARENT_PATH MY_BUILD_PATH_NAME)
message (STATUS "MY_BUILD_PATH_NAME = "${MY_BUILD_PATH_NAME}"")

如果你要计算从你的路径到另一个路径的相对路径,那么你必须使用 cmets 中已经提到的file(RELATIVE_PATH) API。

file (RELATIVE_PATH MY_BUILD_PATH_NAME "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/../")
message (STATUS "MY_BUILD_PATH_NAME = "${MY_BUILD_PATH_NAME}"")

这将计算../ 并将其存储到变量MY_BUILD_PATH_NAME 中。

【讨论】:

    【解决方案2】:

    get_filename_component command 可用于提取部分文件名

    get_filename_component(DIR_NAME_NOPATH ${CMAKE_CURRENT_BINARY_DIR} NAME)
    message("Binary dir name: '${DIR_NAME_NOPATH}'")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 2020-12-17
      • 2022-01-03
      • 2010-10-14
      • 2015-12-26
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多