将CMake选项从命令行移动到顶级CMakeLists.txt
我使用以下命令,使用命令行构建DCMTK:将CMake选项从命令行移动到顶级CMakeLists.txt,cmake,dcmtk,Cmake,Dcmtk,我使用以下命令,使用命令行构建DCMTK: cmake -DBUILD_APPS=BOOL:OFF ../latest_dcmtk 我想将BUILD_APPS设置从命令行移到顶级CMakeLists.txt配置文件中。无论我如何尝试在顶级配置文件中设置BUILD_APPS选项,除非我从命令行显式设置BUILD_APPS选项,否则我永远不会获得正确的行为 有没有办法从顶级CMakeLists.txt文件显式设置命令行选项 我从DCMTK的资料中借用了这一点&它不起作用: SET (BUILD_A
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文件时,我正确地看到了选项SET:
./CMakeCache.txt:BUILD_APPS:BOOL=OFF
不幸的是,该选项不起作用。一般来说,在使用CMake时,您必须记住两件事:
- 您必须先执行
,然后代码才会检查设置(BUILD\u APPS OFF CACHE BOOL”“FORCE)
if(BUILD\u APPS)
- 您必须检查主
中是否没有正常变量CMakeLists.txt
),以隐藏缓存的变量集(BUILD_APPS…
文件中的任何内容都只是代码处理完成后(在主CMakeCache.txt
末尾)这些变量的状态CMakeLists.txt
-D
确实强制缓存条目。因此,使用-D
命令行选项和设置(…缓存…强制)
之间应该没有区别。只是不能将它们组合使用(后者将始终覆盖任何给定的命令行选项)
请尝试在主CMakeLists.txt
顶部添加,以查找隐藏/覆盖变量的代码部分
参考资料
选项(build\u APPS“OFF”)
或设置(build\u APPS OFF CACHE BOOL”)
(不需要强制)对于带有cmake
命令行选项-DBUILD\u APPS=BOOL:OFF
的选项集,该值等效。如果第二种方法有效,但第一种方法无效,则CMakeLists.txt
会执行一些非常特殊的操作。为了确保这一点,我重试了一次,-D
会强制执行缓存项。因此,使用-D
命令行选项和设置(…强制)
之间应该没有区别。我同意有些奇怪,建议在主CMakeLists.txt
顶部添加variable\u watch(BUILD\u APPS)
,以查找隐藏/覆盖变量的代码部分。有关更多详细信息,请参见例如。