我的cmake中有这样的内容:
set(MyLib_SRC $ENV{MyLib_DIR}/MyLib.cpp)
add_library(MyLibrary STATIC ${MyLib_SRC})
Run Code Online (Sandbox Code Playgroud)
但是当我运行cmake时,出现此错误:
CMake Warning (dev) at CMakeLists.txt:97 (add_library):
Syntax error in cmake code when parsing string
D:\New\Development\Lib/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.
Run Code Online (Sandbox Code Playgroud)
我读了这个OS答案cmake分析错误:无效的转义序列\ o,但是如何将宏(哪个宏!)更改为函数?
env变量的值为
MyLib_DIR=D:\New\Development\Lib
Run Code Online (Sandbox Code Playgroud)
问题在于$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})
Run Code Online (Sandbox Code Playgroud)
正如 Angew 的回答所示,环境变量中的反斜杠被解释为转义序列。从 CMake 3.20 开始,该命令提供了许多路径操作工具cmake_path。使用该SET选项,此命令会将输入转换为带有正斜杠 ( /) 的 CMake 路径:
cmake_path(SET MyLib_SRC $ENV{MyLib_DIR}/MyLib.cpp)
add_library(MyLibrary STATIC ${MyLib_SRC})
Run Code Online (Sandbox Code Playgroud)
该MyLib_SRC变量现在将包含正斜杠:
D:/New/Development/Lib/MyLib.cpp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |