0

我正在使用命令行构建 DCMTK,使用以下命令:

cmake -DBUILD_APPS=BOOL:OFF ../latest_dcmtk

我想将 BUILD_APPS 设置从命令行移动到顶级 CMakeLists.txt 配置文件中。无论我如何尝试在顶级配置文件中设置 BUILD_APPS 选项,除非我从命令行显式设置 BUILD_APPS 选项,否则我永远不会得到正确的行为。

有没有办法从顶级 CMakeLists.txt 文件中显式设置命令行选项?

我从 DCMTK 资源中借用了它,但它不起作用:

SET (BUILD_APPS OFF CACHE BOOL "" FORCE)                                                             
MESSAGE ("-- BUILD_APPS is set to " ${BUILD_APPS})

当我查看由上面的 SET 命令生成的 CMakeCache.txt 文件时,我看到选项设置正确:

./CMakeCache.txt:BUILD_APPS:BOOL=OFF

不幸的是,该选项不起作用。

4

1 回答 1

0

一般来说,在使用 CMake 时需要牢记两点:

  1. CMake 是一种脚本语言,因此所有代码都是按顺序处理的
  2. CMake 的变量缓存用于在两次运行之间保持值

所以我同意@Tsyvarev 和@usr1234567 的观点,这很可能是一个订购问题:

  • 你必须set(BUILD_APPS OFF CACHE BOOL "" FORCE)在你/代码检查之前做if (BUILD_APPS)
  • set(BUILD_APPS ...)您必须检查在您的主要CMakeLists.txt隐藏缓存变量之后是否没有正常变量
  • 文件中的CMakeCache.txt内容只是代码的所有处理完成后这些变量的状态(在 main 结束时CMakeLists.txt

我又试了一次,-D确实强制缓存条目。所以使用-D命令行选项和set(... CACHE ... FORCE). 只是你不能组合使用它们(后者总是会覆盖任何命令行给定选项)。

请尝试variable_watch(BUILD_APPS)在 main 顶部添加CMakeLists.txt以查找隐藏/覆盖变量的代码部分。

参考

于 2015-10-30T08:23:39.513 回答