关于macos:CMake查找不正确的OpenCV版本

CMake finding incorrect version of OpenCV

我安装了多个版本的OpenCV,而CMake却找到了错误的版本。我已经使用brew安装了opencv和opencv3,它们存在于以下路径中:

1
2
/usr/local/opt/opencv3
/usr/local/opt/opencv

我的CMakeLists.txt如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
cmake_minimum_required(VERSION 2.8)
set(ENV{OpenCV_DIR}"/usr/local/opt/opencv3")

project(TestProject)

#OpenCV
find_package( OpenCV 3 REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )

MESSAGE ( STATUS"Found OpenCV: ${OpenCV_VERSION}" )
MESSAGE ( STATUS"OpenCV_INCLUDE_DIRS= ${OpenCV_INCLUDE_DIRS}" )
MESSAGE ( STATUS"OpenCV_DIR= $ENV{OpenCV_DIR}" )

我正在使用OpenCV_DIR指向我要使用的OpenCV的位置(在本示例中,它是在100%确定此变量指向正确的位置之前立即设置的)。

我的输出是这样的:

1
2
3
-- Found OpenCV: 3.0.0
-- OpenCV_INCLUDE_DIRS= /usr/local/include/opencv
-- OpenCV_DIR= /usr/local/opt/opencv3

因此,它找到的是OpenCV(3.0.0)的正确版本,但是include路径设置为其他一些opencv,在这种情况下,/ usr / local / include / opencv指向/ usr / local / opt / opencv,是2.4.8版本。

结果,我的程序都找不到适合的文件!如果OpenCV_DIR环境变量似乎不起作用,是否有人知道如何告诉CMake寻找哪个版本?


您可以在find_package中显式分配路径。例如,

find_package( OpenCV 3 REQUIRED PATHS"/usr/local/opt/opencv3" )


如所示,OP正在使用cMake V2.8。因此,以下内容适用于包括所需的目录。

1
2
3
4
#OpenCV
find_package( OpenCV 3 REQUIRED )
include_directories([BEFORE]"/usr/local/opt/opencv3")  # your cv2 desired folder
                                                        #            stated here.

[BEFORE]参数通知cMake该特定文件夹首先使用,而不是其他CV文件夹。

对于高于v2.8的cMake,您不应使用include_directories,而应使用以下内容:

target_include_directories(test PRIVATE ${YOUR_DIRECTORY})