将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
Correct way to build OpenCV as a third party library along with your project in CMAKE
我有一个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 配置文件。
对于构建和安装步骤,您可以使用ExternalProject
或FetchContent
(我更喜欢后者(,但由于 OpenCV 的构建时间可能很长,您可能希望将构建工件保留在项目的构建文件夹之外。然后,您可以擦除构建文件夹以重建项目,而无需重建整个 OpenCV 库。 就我而言,我正在使用一个 shell 脚本,如果需要,可以在构建需要它的项目之前构建 OpenCV。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 该代码注入第三方Qt应用程序并执行一些方法来获取Qt应用程序信息
- 对第三方库上的类::方法的未定义引用
- 将第三方库添加到 git 项目的首选方法
- 将第三方异步 API 与 Cap'n Proto RPC 集成的好方法是什么?