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

如何通过命令行界面(CLI)向CMake传递包含空格的变量?

解决CMake命令行传递含空格的变量值问题

你遇到的其实是shell命令行解析的问题,不是CMake本身的限制——shell会把空格当作参数分隔符,导致你的编译选项被拆成了多个独立参数,CMake自然无法正确识别。下面给你几个可靠的解决办法:

方法1:用单引号包裹完整参数值(Linux/macOS的bash/zsh环境)

直接把带空格的选项用单引号包起来,shell会原样保留内部的空格,不会解析成分隔符:

cmake physx/sources/compiler/cmake -B build -DCMAKE_CXX_FLAGS='-Wno-restrict -Wno-class-memaccess'

单引号是Linux/macOS下传递含空格字符串最安全的方式,内部所有字符都会原封不动传给CMake。

方法2:对空格进行转义

如果不想用引号,可以在空格前加反斜杠\,告诉shell这个空格是参数值的一部分,不是分隔符:

cmake physx/sources/compiler/cmake -B build -DCMAKE_CXX_FLAGS=-Wno-restrict\ -Wno-class-memaccess

方法3:Windows CMD环境用双引号包裹

如果你在Windows的命令提示符下操作,直接用双引号包裹整个选项即可:

cmake physx/sources/compiler/cmake -B build -DCMAKE_CXX_FLAGS="-Wno-restrict -Wno-class-memaccess"

Windows CMD的双引号会保留内部空格,不会出现截断问题。

方法4:绕开命令行,在CMakeLists里追加选项

如果这些编译选项是固定需要的,也可以直接修改项目的CMake配置文件,避开命令行的解析问题:
比如在项目的CMakeLists.txt中添加:

# 直接添加编译选项(推荐,比修改CMAKE_CXX_FLAGS更规范)
add_compile_options(-Wno-restrict -Wno-class-memaccess)

# 或者修改CMAKE_CXX_FLAGS(如果必须覆盖或追加)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-restrict -Wno-class-memaccess")

内容的提问来源于stack exchange,提问作者Gasim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:14:06