CMake:无法设置变量以使用 OpenCV 关闭

Posted

技术标签:

【中文标题】CMake:无法设置变量以使用 OpenCV 关闭【英文标题】:CMake: Cannot set a variable to use OpenCV off 【发布时间】:2015-03-04 14:23:14 【问题描述】:

我有以下 CMake 代码段

#OpenCV
option(USE_OPENCV "Use OpenCV data sources" ON)

这里我默认开启了OpenCV的使用,然后我就有了:

if(USE_OPENCV)
    find_package( OpenCV REQUIRED )
    if(OpenCV_FOUND)
        include_directories($OpenCV_INCLUDE_DIRS)
    else(OpenCV_FOUND)
        set(USE_OPENCV OFF)
        message("OpenCV could not be found. Turning OPENCV OFF.")        
    endif(OpenCV_FOUND)
endif(USE_OPENCV)

所以我在没有 OpenCV 的配置上运行它,我从 CMake 收到消息:“找不到 OpenCV。关闭 OPENCV”。但是,退出屏幕,我看到 CMake USE_OPENCV 变量仍然打开。我期待它被设置为关闭。

我做错了什么吗?

[编辑] 可以产生该行为的完整 CMakeLists 文件是:

project(Test)
cmake_minimum_required(VERSION 2.8)

#OpenCV
option(USE_OPENCV "Use OpenCV data sources" ON)

if(USE_OPENCV)
    find_package( OpenCV REQUIRED )
    if(OpenCV_FOUND)
        include_directories($OpenCV_INCLUDE_DIRS)
    else(OpenCV_FOUND)
        set(USE_OPENCV OFF)
        message(FATAL_ERROR "OpenCV could not be found. Turning OpenCV OFF.")        
    endif(OpenCV_FOUND)
endif(USE_OPENCV)

做一些简单而毫无意义的事情,比如:

project(Test2)
cmake_minimum_required(VERSION 2.8)

#OpenCV
option(USE_OPENCV "Use OpenCV data sources" ON)

if(USE_OPENCV)
    message("Turn it OFF!")
    set(USE_OPENCV OFF)
endif(USE_OPENCV)

即使这样也行不通……

【问题讨论】:

您是否删除了 CMakeCache.txt 或完整的构建目录? 我这样做了,不,它没有改变任何东西:/ 然后你必须调试,在每个分支中打印消息并检查是否符合你的期望。 这几乎就是我的 CMakeLists 文件的要点。我已编辑帖子以包含完整文件。 你试过用一个简单的集合替换option吗? 【参考方案1】:

好的,所以必须缓存该值。所以,我做了类似的事情:

set(USE_OPENCV OFF CACHE BOOL "ON OFF" FORCE)

这似乎有效。如果有人有更好的解决方案,请更新帖子。

【讨论】:

在 Windows 中使用 set(CMAKE_USE_OPENSSL OFF CACHE BOOL "ON OFF" FORCE 关闭了 OPENSSL 谢谢!

以上是关于CMake:无法设置变量以使用 OpenCV 关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 CMake 中的“OpenCV”等变量

opencv+Qt+cmake安装配置

Qt+OpenCV配置教程(图解亲测)

如何知道 CMake 找到的库版本?

使用 CMake 编译 openCV:设置架构和优化标志

Linux下OpenCV的安装与测试成功教程(解决E: 无法定位软件包 libjasper-dev无法找到directory `opencv.pc‘fatal error:“highgui.h“)