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

发布于:2024-05-06 ⋅ 阅读:(27) ⋅ 点赞:(0)

作者:翟天保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,将配置改为如下所示。

# 设置CMake最小版本
cmake_minimum_required (VERSION 3.8)
# 设置项目名字
project ("Main")
# 配置编译器参数
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
# 包含子项目。
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。

#pragma once
#include <iostream>
#include <opencv2/opencv.hpp>
#include "TestCMake.h"

using namespace std;
using namespace cv;

int main()
{
	Mat A = Mat::zeros(10000, 10000, CV_32FC1);
	// 随意创建一个A矩阵
	for (int i = 0; i < A.rows; i++)
	{
		for (int j = 0; j < A.cols; j++)
		{
			A.at<float>(i, j) = rand() % 100 / 100.f;
		}
	}
	Mat B0, B1, B2;
	B0 = A.clone();
	B1 = A.clone();
	B2 = A.clone();

	// 动态地址操作法
	double time0 = static_cast<double>(getTickCount());
	for (int i = 0; i < A.rows; i++)
	{
		for (int j = 0; j < A.cols; j++)
		{
			B0.at<float>(i, j) *= 2;
		}
	}
	time0 = ((double)getTickCount() - time0) / getTickFrequency();
	cout << "    动态地址法运行时间为:" << time0 << "秒" << endl << endl;

	// 迭代器操作法
	double time1 = static_cast<double>(getTickCount());
	Mat_<float>::iterator it = B1.begin<float>();
	Mat_<float>::iterator itend = B1.end<float>();
	for (; it != itend; ++it)
	{
		(*it) *= 2;
	}
	time1 = ((double)getTickCount() - time1) / getTickFrequency();
	cout << "    迭代器法运行时间为:" << time1 << "秒" << endl << endl;

	// 指针操作法
	double time2 = static_cast<double>(getTickCount());
	for (int i = 0; i < A.rows; i++)
	{
		float *data = B2.ptr<float>(i);
		for (int j = 0; j < A.cols; j++)
		{
			data[j] *= 2;
		}
	}
	time2 = ((double)getTickCount() - time2) / getTickFrequency();
	cout << "    指针法运行时间为:" << time2 << "秒" << endl << endl;

	system("pause");
	return 0;
}

      8)运行看看,搞定。

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

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