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

打印 上一主题 下一主题

主题 673|帖子 673|积分 2019

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请接洽作者获得授权,非商业转载请注明出处
为什么要链接第三方库?


  • 进步效率:使用第三方库可以加速开发过程,因为你不需要重新开始编写所有功能。第三方库通常提供了已经实现并经过测试的功能,你可以直接调用这些功能,而不必重复造轮子。
  • 扩展功能:第三方库通常提供了各种功能和工具,可以帮助你扩展你的应用程序的功能,如图形界面库、数据处置处罚库、网络库等。通过使用这些库,你可以轻松地为你的应用程序添加新的功能。
  • 进步质量:许多知名的第三方库经过了广泛的测试和使用,因此它们通常具有较高的质量和可靠性。通过使用这些经过验证的库,你可以进步你的应用程序的质量,减少错误和漏洞的大概性。
  • 节省本钱:使用现有的第三方库可以节省开发本钱,因为你不需要为了实现某些功能而花费大量时间和精力。相比之下,自行开发大概需要更多的资源和时间。
  • 社区支持:许多第三方库有着活跃的社区支持,你可以在社区中获取帮助、分享履历,而且从其他开发者的贡献中受益。这种支持可以帮助你更快地办理问题,而且学习到新的技能和最佳实践。

配置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项目中链接第三方库”的教程。 
       假如文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表