C++ CMAKE查找包,但不链接库
我正在尝试使用CMAKE编译一个项目,并使用MinGW32-make.exe制作。我的CMakeLists.txt看起来是这样的: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_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文件。