You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake中正确转义分号与引号设置CMAKE_CROSSCOMPILING_EMULATOR

解决CMake中CMAKE_CROSSCOMPILING_EMULATOR的WINEPATH设置问题

正确设置方式

推荐使用env命令配合CMake生成器表达式$<SEMICOLON>规避分号被解析为列表分隔符的问题:

set(CMAKE_CROSSCOMPILING_EMULATOR "env" "WINEPATH=/usr/x86_64-w64-mingw32/lib$<SEMICOLON>/usr/lib/gcc/x86_64-w64-mingw32/9.3-posix" "wine")

如果路径需要复用,也可以先定义变量再转义处理:

# 定义原始分号分隔的路径
set(WINE_LIB_PATHS "/usr/x86_64-w64-mingw32/lib;/usr/lib/gcc/x86_64-w64-mingw32/9.3-posix")
# 将分号替换为生成器表达式,避免CMake解析为列表分隔符
string(REPLACE ";" "$<SEMICOLON>" WINE_LIB_PATHS_ESCAPED "${WINE_LIB_PATHS}")
# 最终设置模拟器变量
set(CMAKE_CROSSCOMPILING_EMULATOR "env" "WINEPATH=${WINE_LIB_PATHS_ESCAPED}" "wine")

之前写法的问题分析

  1. 直接写分号:CMake会将分号识别为列表元素分隔符,把WINEPATH="..."拆成两个参数,导致分号被替换为空格,同时引号被转义;
  2. 单反斜杠转义分号:CMake解析时会自动吃掉反斜杠,分号仍被当作列表分隔符,结果和第一种写法一致;
  3. 三重反斜杠转义分号:虽然保留了分号,但CMake会为包含特殊字符的参数自动添加额外引号,导致WINEPATH的值被多余引号包裹,wine无法正确识别该环境变量。

内容的提问来源于stack exchange,提问作者Rémi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:41:04