将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法

Correct way to build OpenCV as a third party library along with your project in CMAKE

本文关键字:第三方 方法 构建 一起 OpenCV CMAKE 项目      更新时间:2023-10-16

我有一个C++项目,我使用opencv,VTK。我想自动构建和安装这些依赖库(opencv,vtk(,它们位于我的第三方项目文件夹中。我知道opencv和VTK使用cmake构建系统来构建他们的库。我什至看到了函数ExternalProject将它们添加到我的CMakesLists中.txt但是我在将目标与opencv库链接时遇到了问题。

搜索堆栈溢出我找不到一个正确定义的方法来为版本 3.0 实现这一点,建议的解决方案是版本 <3.0。 我想知道您将如何构建您的项目以自动构建 opencv 作为第三方库,导出其目标并将其与我的项目目标链接。

我认为最好的方法是在github上寻找更大的项目正在做什么。我建议查看他们使用 opencv 版本 3.2 的这个存储库,自动下载并编译它。我相信这是正确的方法,因为如果您想更新代码,您只需更改版本即可尝试与较新版本的兼容性。
您正在寻找的可能是所谓的超级构建。这篇文章可能会有所帮助。

我建议在您的存储库或构建目录的子文件夹中构建并安装 opencv。然后,您可以将OpenCV_DIR环境变量设置为<opencv_install_prefix>/lib/cmake/opencv4文件夹(或至少指向OpenCVConfig.cmake所在的文件夹(

然后在您的CMakeLists.txt中,您可以直接使用:

find_package(OpenCV 4 REQUIRED
COMPONENTS core imgproc ximgproc)
target_link_libraries(${PROJECT_NAME} PUBLIC ${OpenCV_LIBS})

OpenCV_DIR变量告诉 CMake 在哪里可以找到find_package函数所需的 OpenCV 配置文件。

对于构建和安装步骤,您可以使用ExternalProjectFetchContent(我更喜欢后者(,但由于 OpenCV 的构建时间可能很长,您可能希望将构建工件保留在项目的构建文件夹之外。然后,您可以擦除构建文件夹以重建项目,而无需重建整个 OpenCV 库。 就我而言,我正在使用一个 shell 脚本,如果需要,可以在构建需要它的项目之前构建 OpenCV。