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/externalfind_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})

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

最新更新