当前位置:   article > 正文

使用Visual Studio在CMake项目中链接第三方库(OpenCV为例)

使用Visual Studio在CMake项目中链接第三方库(OpenCV为例)

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

为什么要链接第三方库?

  1. 提高效率:使用第三方库可以加速开发过程,因为你不需要从头开始编写所有功能。第三方库通常提供了已经实现并经过测试的功能,你可以直接调用这些功能,而不必重复造轮子。

  2. 扩展功能:第三方库通常提供了各种功能和工具,可以帮助你扩展你的应用程序的功能,如图形界面库、数据处理库、网络库等。通过使用这些库,你可以轻松地为你的应用程序添加新的功能。

  3. 提高质量:许多知名的第三方库经过了广泛的测试和使用,因此它们通常具有较高的质量和可靠性。通过使用这些经过验证的库,你可以提高你的应用程序的质量,减少错误和漏洞的可能性。

  4. 节省成本:使用现有的第三方库可以节省开发成本,因为你不需要为了实现某些功能而花费大量时间和精力。相比之下,自行开发可能需要更多的资源和时间。

  5. 社区支持:许多第三方库有着活跃的社区支持,你可以在社区中获取帮助、分享经验,并且从其他开发者的贡献中受益。这种支持可以帮助你更快地解决问题,并且学习到新的技能和最佳实践。

配置CMake教程

       1)安装CMake教程如下所示。

 Windows下配置CMake(入门级教程,适合新人收藏学习)_window cmake-CSDN博客

       2)创建CMake项目教程如下所示。

使用Visual Studio创建跨平台CMake项目_visual studio 生成cmakelist-CSDN博客

       3)如果你按要求执行完前两步,那你当前的项目应该是一个总项目+子项目的组合。

      4)打开总项目的CMakeLists,将配置改为如下所示。

  1. # 设置CMake最小版本
  2. cmake_minimum_required (VERSION 3.8)
  3. # 设置项目名字
  4. project ("Main")
  5. # 配置编译器参数
  6. set(CMAKE_CXX_STANDARD 17)
  7. set(CMAKE_CXX_STANDARD_REQUIRED True)
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
  9. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
  10. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
  11. # 包含子项目。
  12. add_subdirectory ("TestCMake")

      5)配置编译器参数可以按自己需求开启。假设你想开启OpenMP支持,只需要找到它,把它的快捷名称用set配置即可。

      6)再打开子项目TestCMake的CMakeLists。add_executable就是将源码和项目执行文件绑定;后面的命令就是用来配置OpenCV的,处于个人习惯,我喜欢给路径定义一个变量,当然也可以不用这一步;最主要的就是用include_directories将头文件包含,用target_link_libraries将lib包含;而bin一般情况要么放在系统根目录,要么配置了环境变量,当然也可以用代码直接复制bin里的dll文件到当前项目路径。

      7)我写了一段测试代码,如下分别是TestCMake.h和TestCMake.cpp。

  1. #pragma once
  2. #include <iostream>
  3. #include <opencv2/opencv.hpp>
  1. #include "TestCMake.h"
  2. using namespace std;
  3. using namespace cv;
  4. int main()
  5. {
  6. Mat A = Mat::zeros(10000, 10000, CV_32FC1);
  7. // 随意创建一个A矩阵
  8. for (int i = 0; i < A.rows; i++)
  9. {
  10. for (int j = 0; j < A.cols; j++)
  11. {
  12. A.at<float>(i, j) = rand() % 100 / 100.f;
  13. }
  14. }
  15. Mat B0, B1, B2;
  16. B0 = A.clone();
  17. B1 = A.clone();
  18. B2 = A.clone();
  19. // 动态地址操作法
  20. double time0 = static_cast<double>(getTickCount());
  21. for (int i = 0; i < A.rows; i++)
  22. {
  23. for (int j = 0; j < A.cols; j++)
  24. {
  25. B0.at<float>(i, j) *= 2;
  26. }
  27. }
  28. time0 = ((double)getTickCount() - time0) / getTickFrequency();
  29. cout << " 动态地址法运行时间为:" << time0 << "秒" << endl << endl;
  30. // 迭代器操作法
  31. double time1 = static_cast<double>(getTickCount());
  32. Mat_<float>::iterator it = B1.begin<float>();
  33. Mat_<float>::iterator itend = B1.end<float>();
  34. for (; it != itend; ++it)
  35. {
  36. (*it) *= 2;
  37. }
  38. time1 = ((double)getTickCount() - time1) / getTickFrequency();
  39. cout << " 迭代器法运行时间为:" << time1 << "秒" << endl << endl;
  40. // 指针操作法
  41. double time2 = static_cast<double>(getTickCount());
  42. for (int i = 0; i < A.rows; i++)
  43. {
  44. float *data = B2.ptr<float>(i);
  45. for (int j = 0; j < A.cols; j++)
  46. {
  47. data[j] *= 2;
  48. }
  49. }
  50. time2 = ((double)getTickCount() - time2) / getTickFrequency();
  51. cout << " 指针法运行时间为:" << time2 << "秒" << endl << endl;
  52. system("pause");
  53. return 0;
  54. }

      8)运行看看,搞定。

       以上就是“使用Visual Studio在CMake项目中链接第三方库”的教程。 

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/514934
推荐阅读
相关标签
  

闽ICP备14008679号