【问题标题】:CMAKE override variable set in CMakeLists.txt via commandline通过命令行在 CMakeLists.txt 中设置的 CMAKE 覆盖变量
【发布时间】:2020-01-11 13:49:00
【问题描述】:

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

set(BUILD_SHARED_LIBS ON)

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

cmake -UBUILD_SHARED_LIBS -DBUILD_SHARED_LIBS=OFF ..

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

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

set(BUILD_SHARED_LIBS ON CACHE BOOL "library build mode")

【问题讨论】:

  • 这是唯一可以修改的 CMake 文件吗?您能否修改项目中的其他 CMakeLists.txt 文件,可能是调用 add_library() 的文件?
  • @squareskittles 遗憾的是,整个项目都作为 git 子模块引入。作为一种解决方法,我现在使用sed 在构建之前替换该行并在之后恢复...

标签: cmake


【解决方案1】:

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


如果你通过命令行传递一个变量,那么它总是一个缓存变量。在CMakeLists.txt 中设置变量的正常风味时,两种风味都存在。但是当一个变量被取消引用时,CMake 更喜欢普通的风格而不是缓存的。在variables' documentation 中查看更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 2021-06-15
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2021-06-26
    相关资源
    最近更新 更多