Windows下使用CMake生成并使用动态库

生成动态库

// example.h

#pragma once

#include <iostream>

#ifdef EXAMPLE_EXPORTS
#define EXAMPLE_API __declspec(dllexport)
#else
#define EXAMPLE_API __declspec(dllimport)
#endif

class EXAMPLE_API MyClass
{
public:
    MyClass();

    ~MyClass();

    void memberFunction();
};
#include "example.h"

MyClass::MyClass()
{
}

MyClass::~MyClass()
{
}

void MyClass::memberFunction()
{
    std::cout << "111" << std::endl;
}

// CMakeLists.txt

# CMake最低版本要求
cmake_minimum_required (VERSION 2.0)

# 项目名称
project(ExampleLibrary)

# 设置编译器标准
set(CMAKE_CXX_STANDARD 11)

# 添加生成的DLL文件
add_library(example SHARED example.cpp example.h)

# 定义导出宏以控制导入导出
target_compile_definitions(example PRIVATE EXAMPLE_EXPORTS)

在这里插入图片描述
生成的动态库和静态库在build/Debug目录下

使用动态库

在这里插入图片描述
1、拷贝头文件和静态库到当前目录下

2、创建bin目录,在里面创建Debug目录,并把动态库拷贝到Debug目录下

在这里插入图片描述

// main.cpp

#include <iostream>
#include "example.h"

int main()
{
    // 使用动态链接库中的类和函数
    MyClass *myObject = new MyClass();
    myObject->memberFunction();

    delete myObject;
    return 0;
}
// CMakeLists.txt

# CMake最低版本要求
cmake_minimum_required(VERSION 3.0)

# 项目名称
project(main)

# 设置编译器标准
set(CMAKE_CXX_STANDARD 11)

# 添加动态库路径
link_directories(${CMAKE_CURRENT_SOURCE_DIR})

# 添加生成的可执行文件
add_executable(main main.cpp)

# 查找动态库并链接
target_link_libraries(main PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/example.lib)

# 指定输出目录
set_target_properties(main PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin
)

在这里插入图片描述
生成的的exe就在bin/Debug目录下

在这里插入图片描述
在命令行执行main.exe就会看到输出。

问题1:为什么要把动态库放在bin/Debug目录下

因为exe执行时需要找到动态库的路径,要么设置环境变量,要么拷贝到同级目录下。

问题2:修改动态库的代码之后还需要生成吗

不需要生成,修改动态库代码之后重新生成动态库,将动态库替换即可。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值