我想将一个已设置为路径元素组合的变量(可能是绝对路径和相对路径)并从中获取绝对路径。类似于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
默认值。)
答案 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})
这也会将任何反斜杠 (\
) 干净地转换为正斜杠。