接触大的项目,铺天盖地的代码总是会掩盖了开发环境和工具的本质,上手之前,跑跑小的历程有助于对项目的理解,提高效率。
- 首先记录一下 dll(动态链接库)的生成过程:
建立文件夹
Execise_CmakeDLLgitGtest
建立两个子文件夹和文本文件
build lib
CmakeLists.txt
CmakeLists.txt如下:
PROJECT(ALULIB)
ADD_SUBDIRECTORY(lib)
build是cmake的执行目录,会在其中生成执行cmake指令后的一些文件,执行之前是空的。
lib下存放准备生成dll的源文件和文件以及自己的CmakeLists.txt,分别如下:
ALU.cpp
#include "ALU.h"
int main()
{
ALU alu1(4, 2);
int get_add, get_sub, get_mul, get_div;
get_add = alu1.add();
get_sub = alu1.sub();
get_mul = alu1.mul();
get_div = alu1.div();
cout << get_add << endl;
cout << get_sub << endl;
cout << get_mul << endl;
cout << get_div << endl;
system("Pause");
return 0;
}
ALU.h
#pragma once
#define DllExport __declspec( dllexport )//宏定义
#ifndef ALU_H
#define ALU_H
#include <iostream>
using namespace std;
class DllExport ALU //要生成dll必须加上这个宏,否则会出错,这也是我求教得到的,之前也不懂,特此指出注意一下,同时致谢!
{
public:
ALU(int opr_a, int opr_b)
{
a = opr_a;
b = opr_b;
};
~ALU() {};
int add();
int sub();
int mul();
int div();
private:
int a;
int b;
};
#endif
CmakeLists.txt
SET(LIBALU_SRC ALU.cpp)
ADD_LIBRARY(ALU SHARED ${LIBALU_SRC}) #想得到动态库,参数就是SHARED
文件都准备好之后,在 cmd 中进入build文件夹下,执行
cmake . .
其中“. .”的意思是在其父目录执行cmake,正好是主文件夹下。
运行结果:
在build中生成了ALULIB.sln
这个文件就是要用到的文件,现在该visual studio 2015登场了!
直接双击打开sln文件,会直接在VS中启动。
右键ALL_BUILD,选择build,开始编译整个工程。
之后在build生成若干新的文件夹,也有一个lib,进入这个lib,Debug,发现了一个dll和lib。这里需要说明,即使是生成dll动态链接库文件,也会同时产生一个lib静态连接库文件,这个比专门生成静态连接库的lib要小。此处的lib是作为dll的入口的意思。
到此为止,DLL就制作完成了!