CMake:如何规范化路径?

nor*_*ius 3 cmake

有没有一种强大的方法来规范化CMake中的路径?

例:

# Let's assume that an environment variable MY_ROOT_DIR is set
# that points to some directory.
set(MYFILE "$ENV{MY_ROOT_DIR}/somefile.txt")
message(${MYFILE})
# This will result for example in 
# Win:         C:\path\to\my\root\dir/somefile.txt
# Unix based:  /path/to/my/root/dir/somefile.txt
Run Code Online (Sandbox Code Playgroud)

在此示例中,在将MY_ROOT_DIR其用作路径组件之前,需要对其进行规范化(即用斜杠替换反斜杠).你会如何在CMake中做到这一点?

CMake(或工具链下方的工具)可以处理具有混合分隔符(/\)的路径,或者可以不处理.CMake /用作标准分隔符.CMake为具有错误路径分隔符的路径生成的典型警告\可能类似于:

CMake Warning (dev) at cmake_install.cmake:5 (set):
  Syntax error in cmake code at

    C:/path/to/my/root/build/cmake_install.cmake:5

  when parsing string

    C:\path\to\my\root/somefile.txt

  Invalid escape sequence \p

  Policy CMP0010 is not set: Bad variable reference syntax is an error.  Run
  "cmake --help-policy CMP0010" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
Run Code Online (Sandbox Code Playgroud)

感谢您的任何提示!

Flo*_*ian 6

您可以使用此file(TO_CMAKE_PATH)命令.

TO_CMAKE_PATH模式<path>使用正斜杠(/)将本机转换为cmake样式的路径.输入可以是单个路径,也可以是系统搜索路径$ENV{PATH}.搜索路径将转换为由;字符分隔的cmake样式列表.

这是一个例子:

file(TO_CMAKE_PATH "$ENV{MY_DIR_VAR}" ENV_MY_DIR_VAR)
Run Code Online (Sandbox Code Playgroud)