CMake:获取路径的完整表示减去相对元素

时间:2012-03-21 17:10:19

标签: cmake

我想将一个已设置为路径元素组合的变量(可能是绝对路径和相对路径)并从中获取绝对路径。类似于boost::filesystem::system_complete()在C ++中的作用。例如,我有类似的东西:

set(EXTERNAL_LIB_DIR "${CMAKE_SOURCE_DIR}/../external" CACHE PATH "Location of externals")

虽然有效,但在UI中它有点难看,因为它可能最终看起来像C:/dev/repo/tool/../external。我想知道是否有一个CMake内置命令将其转换为C:/dev/repo/external,然后再编写宏来执行此操作。 find_path有点这样做,但它要求路径已经存在并且值得搜索的东西在那里。无论路径是否存在,我都希望它能够工作(例如,我可能会将其用于重写的CMAKE_INSTALL_PREFIX默认值。)

2 个答案:

答案 0 :(得分:14)

您可以使用:

get_filename_component(NEW_VAR ${EXTERNAL_LIB_DIR} REALPATH)

答案 1 :(得分:0)

从 CMake 3.20 开始,您可以使用 cmake_path 命令来规范化路径,该命令取代了 get_filename_component 命令。

cmake_path(SET MY_NEW_PATH NORMALIZE ${EXTERNAL_LIB_DIR})

这也会将任何反斜杠 (\) 干净地转换为正斜杠。