CMAKE 通过命令行覆盖 CMakeLists.txt 中设置的变量

Fel*_*lix 7 cmake

我有一个 CMakeLists.txt,其中包含以下内容,但无法修改

set(BUILD_SHARED_LIBS ON)
Run Code Online (Sandbox Code Playgroud)

我想使用命令行覆盖这个变量。我试过这个:

cmake -UBUILD_SHARED_LIBS -DBUILD_SHARED_LIBS=OFF ..
Run Code Online (Sandbox Code Playgroud)

但没有效果。有没有办法告诉 cmake 使用命令行中的值而不是这个值?

注意:我知道使用如下所示的缓存可以解决问题,但由于我无法编辑该文件,遗憾的是这不是一个选项:

set(BUILD_SHARED_LIBS ON CACHE BOOL "library build mode")
Run Code Online (Sandbox Code Playgroud)

Tsy*_*rev 5

使用命令行您无法 覆盖正常(非缓存)变量的设置。


如果通过命令行传递变量,那么它始终是缓存变量。当在 中设置变量的正常风格时CMakeLists.txt两种风格都存在。但是当变量被取消引用时,CMake 更喜欢正常的风格而不是缓存的风格。请参阅变量的文档了解更多信息。