作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
为什么要链接第三方库?
-
提高效率:使用第三方库可以加速开发过程,因为你不需要从头开始编写所有功能。第三方库通常提供了已经实现并经过测试的功能,你可以直接调用这些功能,而不必重复造轮子。
-
扩展功能:第三方库通常提供了各种功能和工具,可以帮助你扩展你的应用程序的功能,如图形界面库、数据处理库、网络库等。通过使用这些库,你可以轻松地为你的应用程序添加新的功能。
-
提高质量:许多知名的第三方库经过了广泛的测试和使用,因此它们通常具有较高的质量和可靠性。通过使用这些经过验证的库,你可以提高你的应用程序的质量,减少错误和漏洞的可能性。
-
节省成本:使用现有的第三方库可以节省开发成本,因为你不需要为了实现某些功能而花费大量时间和精力。相比之下,自行开发可能需要更多的资源和时间。
-
社区支持:许多第三方库有着活跃的社区支持,你可以在社区中获取帮助、分享经验,并且从其他开发者的贡献中受益。这种支持可以帮助你更快地解决问题,并且学习到新的技能和最佳实践。
配置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项目中链接第三方库”的教程。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!