cmake 在窗口上生成错误,因为它使用 作为转义序列

cmake generate error on windows as it uses as escape seq

本文关键字:转义序列 因为 窗口 错误 cmake      更新时间:2023-10-16

我的cmake中有这样的东西:

set(MyLib_SRC $ENV{MyLib_DIR}/MyLib.cpp)
add_library(MyLibrary STATIC ${MyLib_SRC})

但是当我运行cmake时,我收到此错误:

CMake Warning (dev) at CMakeLists.txt:97 (add_library):
Syntax error in cmake code when parsing string
D:NewDevelopmentLib/myLib.cpp
Invalid escape sequence N
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.
This warning is for project developers.  Use -Wno-dev to suppress it.

我读了这个操作系统答案cmake解析错误:无效的转义序列\o,但我如何将宏(哪个宏!

env 变量的值为

MyLib_DIR=D:NewDevelopmentLib

问题是$ENV{MyLib_DIR}逐字扩展了环境变量,包括用作路径分隔符的反斜杠。然后,这些序列可以被重新解释为转义序列。

您要做的是在CMake代码中处理路径之前将路径转换为CMake的内部格式:

file(TO_CMAKE_PATH $ENV{MyLib_DIR} MyLib_DIR)
set(MyLib_SRC ${MyLib_DIR}/MyLib.cpp)
add_library(MyLibrary STATIC ${MyLib_SRC})

如 Angew 的回答所示,环境变量中的反斜杠被解释为转义序列。从 CMake 3.20 开始,cmake_path 命令提供了许多路径操作工具。使用 SET 选项,此命令会将输入转换为带有正斜杠 ( / 的 CMake 路径:

cmake_path(SET MyLib_SRC $ENV{MyLib_DIR}/MyLib.cpp)
add_library(MyLibrary STATIC ${MyLib_SRC})

MyLib_SRC变量现在将包含正斜杠:

D:/New/Development/Lib/MyLib.cpp

我想cmake总是期望UNIX风格的路径。所以,我所做的是

set(MayLib_PATH $ENV{MyLib_DIR})
string(REPLACE "\" "/" MayLib_PATH "${MayLib_PATH}")