Windows下Cmake与VS联合制作dll
2016-06-17 16:29
246 查看
接触大的项目,铺天盖地的代码总是会掩盖了开发环境和工具的本质,上手之前,跑跑小的历程有助于对项目的理解,提高效率。
首先记录一下 dll(动态链接库)的生成过程:
建立文件夹
Execise_CmakeDLLgitGtest
建立两个子文件夹和文本文件
build lib
CmakeLists.txt
CmakeLists.txt如下:
build是cmake的执行目录,会在其中生成执行cmake指令后的一些文件,执行之前是空的。
lib下存放准备生成dll的源文件和文件以及自己的CmakeLists.txt,分别如下:
ALU.cpp
ALU.h
CmakeLists.txt
文件都准备好之后,在 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就制作完成了!
首先记录一下 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就制作完成了!
相关文章推荐
- 如何重装TCP/IP协议
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- FREEBASIC 编译可被python调用的dll函数示例
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 微软镜像下载