我想取一个已设置为路径元素(可能是绝对和相对)组合的变量,并从中获得绝对路径。类似于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
默认值)。
您可以使用:
get_filename_component(NEW_VAR ${EXTERNAL_LIB_DIR} REALPATH)
从CMake 3.20开始,您可以使用cmake_path
命令来规范路径,该命令将取代get_filename_component
命令。
cmake_path(SET MY_NEW_PATH NORMALIZE ${EXTERNAL_LIB_DIR})
这也将任何反斜杠()干净地转换为正斜杠。