介绍如何用CMake编译生成动态链接库和静态链接库。
静态库和动态库的区别
建立动态链接库(.so/.dll)
我们把上一个示例中的HelloWorld类编译成动态链接库。
文件目录如下:
1 | aincrad@Inspiron:~/Desktop/HelloWorld$ tree |
由于目标是建立库,而不是生成可执行文件,所以我们不需要main.cpp
。
下面是CMakeLists.txt中的内容:
1 | cmake_minimum_required(VERSION 3.5.1) |
解释CMakeLists.txt中新出现的内容:
set(CMAKE_BUILD_TYPE Release)
表示此次编译为正式发布版本。另外还有Debug
等模式。这个参数决定了在编译时进不进行优化或者包不包含debug信息。详细参见Build types in CMakeadd_library()
和之前的add_executable()
类似。不过是用来创建库文件的,SHARED
参数表明这是一个动态库(其它选项:STATIC or MODULE)。install()
指定了库的安装位置。使用sudo make install
来激发,用来把链接库安装到系统中。
下面是具体的编译命令:
1 | $ mkdir build |
成功编译后会在build文件夹里生成库文件libHelloWorld.so,使用sudo make install
安装成功后的信息:
1 | aincrad@Inspiron:~/Desktop/HelloWorld/build$ sudo make install |
建立静态链接库(.a/.lib)
编译静态库和编译动态库的方式几乎完全一样,唯一的区别就是把add_library()
中的SHARED
参数改成STATIC
。
参考链接
Introduction to CMake by Example
Jermmy’s Lazy Blog–cmake学习笔记