Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMAKE查找包,但不链接库_C++_Opencv_Cmake_Mingw_Mingw32 - Fatal编程技术网

C++ CMAKE查找包,但不链接库

C++ CMAKE查找包,但不链接库,c++,opencv,cmake,mingw,mingw32,C++,Opencv,Cmake,Mingw,Mingw32,我正在尝试使用CMAKE编译一个项目,并使用MinGW32-make.exe制作。我的CMakeLists.txt看起来是这样的: ##################################### cmake_minimum_required (VERSION 3.0) project (TestProject) find_package(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIR}) add_executabl

我正在尝试使用CMAKE编译一个项目,并使用MinGW32-make.exe制作。我的CMakeLists.txt看起来是这样的:

#####################################
cmake_minimum_required (VERSION 3.0) 
project (TestProject)
find_package(OpenCV REQUIRED)
include_directories(${OPENCV_INCLUDE_DIR})
add_executable (main.exe main.cpp)
#####################################
运行“CMAKE-G”MinGW Makefiles运行正常,但当我尝试使用“MinGW32 make.exe”进行生成时,我遇到以下错误:

25:39: fatal error: opencv2/highgui/highgui.hpp: No such file or directory
 #include "opencv2/highgui/highgui.hpp"

当我查看Makefile时,我在任何地方都找不到文本“OpenCV”。应该在哪个文件中标识OpenCV目录?

您没有到达链接库,系统找不到OpenCV标题这是因为您的包含目录设置不正确

指定OpenCV构建目录的位置非常重要,该目录位于OpencvConfig.cmake文件中

此外,您需要将您的库与目标库链接

总之,您的cmake代码应该是这样的:

cmake_minimum_required (VERSION 3.0) 
project( TestProject )
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} )

您没有到达链接库,系统找不到opencv标题这是因为您的包含目录没有正确设置

指定OpenCV构建目录的位置非常重要,该目录位于OpencvConfig.cmake文件中

此外,您需要将您的库与目标库链接

总之,您的cmake代码应该是这样的:

cmake_minimum_required (VERSION 3.0) 
project( TestProject )
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} )

它是
OpenCV\u INCLUDE\u DIRS
变量,包含带有OpenCV头的目录。对于
INCLUDE\u目录()
调用,您应该使用它而不是
OpenCV\u INCLUDE\u DIR
。您可以使用
消息()输出变量的内容
command。注意,目录路径不需要包含OpenCV子字符串。我按照您的建议,使用了以下行:“message(STATUS”OpenCV directory:${OpenCV_INCLUDE_DIRS}),它返回了一个空值,与_DIR相同。当它找到包的时候,它不应该设置这个变量吗?我又看了一眼,大写是我的错。它现在成功链接到OpenCV目录,谢谢!现在,我从OpenCV使用的每个函数都会给出一个“未定义引用”错误。我想我必须为我使用的每个单独的动态库使用“target\u link\u libraries”?它是
OpenCV\u INCLUDE\u DIRS
变量,它包含带有OpenCV头的目录。对于
INCLUDE\u目录()
调用,应该使用它而不是
OPENCV\u INCLUDE\u DIR
。您可以使用
message()
命令输出变量的内容。注意,目录路径不需要包含OpenCV子字符串。我按照您的建议使用了以下行:“message(STATUS”OpenCV directory:${OpenCV_INCLUDE_DIRS})它返回了一个空值,与_DIR相同。当它找到包时,不应该设置这个变量吗?我又看了一眼,大写是我的错。它现在成功链接了OpenCV目录,谢谢!现在我从OpenCV使用的每个函数都会出现“未定义引用”错误。我想我必须使用“我使用的每个动态库的“target_link_libraries”?是的,你做到了。我已经做到了这一点,但在我的target_link_库中缺少了“OpenCV_LIBS”变量。谢谢!但还有一个问题,cmake如何知道最初在哪里查找“OpencvConfig.cmake”“档案?它只是在PATH变量中查找吗?如果您将Opencv构建目录作为环境变量放在PATH中,cmake将自动找到它。但是,在另一种情况下,您必须指定变量OPENCV_DIR,这是您的OPENCV构建目录。这很奇怪,因为我的OPENCV_DIR和path变量都直接指向binaries文件夹,而不是整个构建目录,所以两个位置实际上都不包含.cmake文件,只包含该文件夹的父文件夹。我对此特别感兴趣,因为我有预编译库和自己编译的库,我想知道我正在使用哪一个。这两个库都包含各自的OpencvConfig.cmake文件。是的,你搞定了。我已经做到了这一点,但是在我的目标链接库中缺少了“OpenCV_LIBS”变量。谢谢但还有一个问题,cmake如何知道最初在哪里查找“OpencvConfig.cmake”文件?它只是在PATH变量中查找吗?如果您将Opencv构建目录作为环境变量放在PATH中,cmake将自动找到它。但是,在另一种情况下,您必须指定变量OPENCV_DIR,这是您的OPENCV构建目录。这很奇怪,因为我的OPENCV_DIR和path变量都直接指向binaries文件夹,而不是整个构建目录,所以两个位置实际上都不包含.cmake文件,只包含该文件夹的父文件夹。我对此特别感兴趣,因为我有预编译库和自己编译的库,我想知道我正在使用哪一个。这两个库都包含各自的OpencvConfig.cmake文件。