windows--调用动态库和静态库
前言
个人cmake学习历程记录,帮助自己复习巩固,也为需要的小伙伴提供一点个人学习经验。
一、cmake是什么?
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。
Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
链接: 百科
总结:官方的话总是显得比较高深,绕来绕去。
个人总结:camke首先是一个工具,一般为大型项目构建项目结构所用。以windows平台为例,可以在本地编写名为CMakeLists.txt的文件(名字固定),按照一定的用法规则,即可构建出sln。以前学习c++时,都是在vs上收到配置附加依赖项等环境。开发大型工程时,明显需要一个快速构建项目环境的工具,cmake正发挥了巨大的作用。
二、实战
1.CmakeLists.txt 编写示例
如下(示例):
#根目录
##cmake所需最低版本
cmake_minimum_required(VERSION 3.24.0)
##工程名
project(CMAKE_DEMO)
##设置路径名
set(TARGET_INCLUDE_LIB_PATH ${
PROJECT_SOURCE_DIR}/algorithm_lib)
set(TARGET_INCLUDE_DLL_PATH ${
PROJECT_SOURCE_DIR}/algorithm_dll)
##添加子目录
add_subdirectory(main)
add_subdirectory(algorithm_lib)
add_subdirectory(algorithm_dll)
CmakeLists.txt 需要遵循基本语法规则去书写,这里不过得介绍语法规则。感兴趣的可以查询cmake相关指令
2.项目目录树
如下:
说明:
1:main 文件夹 输出 可执行程序(exe)
2:algorithm_dll 文件夹 输出 动态库(dll)
3:algorithm_lib 文件夹 输出 静态库(lib)
4:bin 文件夹 存放 可执行程序(exe) 和 动态库(dll)
4:lib 文件夹 存放 静态库(lib)
5:build 文件夹 存放 中间文件 ( makefiel 和 sln 等 )
3.项目文件
3.1.静态库 (algorithm_lib)
其中,public文件夹中存放算法的抽象类 iAlgorithmService_lib.h
(1) algorithm_lib.h 代码如下:
#ifndef _ALGORITHM_LIB_H
#define _ALGORITHM_LIB_H
#include "./public/iAlgorithmService_lib.h"
class AlgorithmLib : public IAlgorithmLibService
{
public:
AlgorithmLib() {
};
~AlgorithmLib() {
};
public:
virtual int add(int a, int b) override;
virtual float add(float a, float b) override;
};
#endif
(2) algorithm_lib.cpp 代码如下:
#