使用Vs Studio和Cmake生成C++库

news/2024/11/16 2:14:11/

使用Vs Studio和Cmake生成C++库

在windows系统下,由于没有C++的编译器,想通过源码安装、加载C++的库存在不方便的地方。本文将介绍通过使用Vs Studio运用Cmake的方式,编译一个简单的自定义库,并进行加载、调用。
工程源代码

前提条件

  1. windows
  2. Vs Studio
  3. Cmake(Vs Studio默认环境)

编写并生成自定义库

add.h文件

#include <iostream>#ifdef SIMPLEDLL_EXPORT
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endifclass DLL_EXPORT Add {
public:Add();~Add();double summation(double a, double b);private:
};

add.cpp文件

#include "add.h"Add::Add() {}Add::~Add() {}double Add::summation(double a, double b) {return a + b;
}

CMakeLists.txt文件

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)project ("generate_lib")include_directories(include ${catkin_INCLUDE_DIRS}
)add_library(add SHAREDsrc/add.cpp
)
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/install)
install(TARGETS add LIBRARY DESTINATION install)
install(FILES ${PROJECT_SOURCE_DIR}/include/add.h  DESTINATION include)

依次点击Vs Studio中“全部重新生成”、“安装generate_lib”,在“install”目录下打包生成必要的.h、.dll、.lib文件


测试调用自定义库

  1. use_lib.h文件
// use_lib.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。#pragma once#include "add.h"#include <iostream>
#include <Windows.h>// TODO: 在此处引用程序需要的其他标头。
  1. use_lib.cpp文件
// use_lib.cpp: 定义应用程序的入口点。
//#include "use_lib.h"using namespace std;int main(int argc, char** argv) {Add add;double a = 6.6;double b = 3.4;std::cout << "a + b = " << add.summation(a, b) << std::endl;while (true) {//ros::Duration(1).sleep();Sleep(1000);std::cout << "RRRR" << std::endl;}return 0;
}
  1. CMakeLists.txt文件
# CMakeList.txt: use_lib 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)project ("use_lib")include_directories(include ${catkin_INCLUDE_DIRS}third_libs/generate_lib/include
)link_directories(third_libs/generate_lib/lib
)# 将源代码添加到此项目的可执行文件。
add_executable (use_lib use_lib.cpp)
target_link_libraries(use_lib ${catkin_LIBRARIES} add
)if (CMAKE_VERSION VERSION_GREATER 3.12)set_property(TARGET use_lib PROPERTY CXX_STANDARD 20)
endif()# TODO: 如有需要,请添加测试并安装目标。
  1. 将generate_lib文件夹复制到“use_lib/third_libs/”文件夹路径下。
  2. 将“generate_lib/install/bin/add.dll”文件复制到"use_lib\out\build\x64-debug"文件夹路径下。
  3. 点击VsStudio中的“全部重新生成”即可得到可执行文件。

7. 双击"use_lib\out\build\x64-debug\use_lib.exe"文件运行程序。

http://www.ppmy.cn/news/977757.html

相关文章

Pandas库:从入门到应用(四)--数学函数

一、测试数据 import numpy as np import pandas as pd## 5行3列 0到100的数据 df pd.DataFrame(datanp.random.randint(0, 100, size(5, 3))) df二、基础聚合函数 2.1、count()函数 df.count() # 统计每列的行数(非空),默认axis0 df.count(axis1) # 统计每行的列数(非空)…

Pytorch个人学习记录总结 06

目录 神经网络-卷积层 torch.nn.Conv2d 神经网络-最大池化的使用 torch.nn.MaxPool2d 神经网络-卷积层 torch.nn.Conv2d torch.nn.Conv2d的官方文档地址 CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue,…

面试算法题

1 使用栈实现队列 #include <iostream> #include <stack> class MyQueue { public:MyQueue() {}void push(int x){in.push(x); // 直接将元素push入in栈}int pop(){int data peek(); // 先查一遍&#xff0c;就是更新一遍out栈out.pop();return data;}// 查找队…

linux 驱动开发常用知识点与API

linux 驱动开发常用知识点与API 前言笔记正文最后 前言 之前的读书笔记&#xff0c;以.c 文件的方式记录&#xff0c;在这里也以代码的方式记录 笔记正文 /***************************************中断常用API****************************************/ /* flags 是中断处…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

php套用Iframe访问导致cookie跨域session失效问题

一.背景 a网站&#xff08;www.aa.com&#xff09;嵌入b网站 (www.bb.com) 网站&#xff0c;因为跨域原因&#xff0c;其实如果b网站是以aa.com后缀结尾的话是正常的 二.博客参考 https://juejin.cn/post/7123652955282079751 1.上面的试了这个IE的没什么用&#xff08;有可能…

AI Chat 设计模式:9. 命令模式

本文是该系列的第九篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 介绍下命令模式A.1Q.2 详细说说命令模式适用于啥场景呢A.2Q.3 举一个命令模式的例子&a…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…