zsh + CMake:命令行选项未拆分

zsh + CMake: command line options not split

考虑以下 CMakeLists.txt

cmake_minimum_required(VERSION 3.18..3.21)

project(myproject)

option(USE_ASSERT "Use assertions" ON)
option(USE_DEBUG "Compile in debug mode" OFF)

message(STATUS "USE_ASSERT=${USE_ASSERT}")
message(STATUS "USE_DEBUG=${USE_DEBUG}")

有了这个,下面

cmake -Bbuild -DUSE_ASSERT=0 -DUSE_DEBUG=1

按预期打印:

...
-- USE_ASSERT=0
-- USE_DEBUG=1
...

然而,在 zsh 上,使用中间变量这突然失败了。例如

export CMAKE_ARGS="-DUSE_ASSERT=1 -DUSE_DEBUG=0"
cmake -Bbuild ${CMAKE_ARGS}

现在打印

...
-- USE_ASSERT=1 -DUSE_DEBUG=0
-- USE_DEBUG=OFF
...

CMake 因此无法拆分选项。为什么是这样?我怎样才能避免这个问题?

完整性:

这与CMake无关。

相反,它与您的 shell 处理变量扩展和分词的方式有关。因为你是运行zsh,不是bash,在变量展开时默认不会分词。要为特定参数恢复此行为,请改写 ${=CMAKE_ARGS}