cmake 在窗口上生成错误,因为它使用 作为转义序列
cmake generate error on windows as it uses as escape seq
我的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}")
相关文章:
- 如何在C++中用'\'替换''来处理转义序列?
- 是否可以在原始字符串文本中插入转义序列?
- 使用无法适应其相关类型的转义序列
- C++二进制值的转义序列
- 使变量字符串忽略转义序列
- "Delete"的转义序列
- getchar() 避免转义序列
- GCC 编译时出现警告:未知转义序列:"\040"
- C++ 中转义序列的数据类型
- 如何在 QString 中解析转义序列
- "'"转义序列的目的是什么?
- C++ 无法识别的转义序列
- lex 中 OR ( | ) 的转义序列
- 转义序列?在 Qstring 中使用引号
- <<未找到运算符和无法识别的转义序列
- 调用 AINSI 转义序列时避免换行
- cmake 在窗口上生成错误,因为它使用 作为转义序列
- 如何分析具有原始转义序列的字符串
- 十六进制转义序列的最大长度
- 字符混淆中的转义序列