如何通过命令行界面(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
相关产品推荐
相关产品推荐

