CMake基础篇(七)——编译动态或静态库

前言:
   本篇文章介绍CMake如何编译动态或静态库。

1 编译库

  在项目实战中常常会涉及到使用第三方库,可以是动态或静态库,而用CMake如何将源码编译成动态或静态库是本文要探讨的话题。
  目录结构如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
╰─ tree
.
├── build
├── CMakeLists.txt
├── inc
│ └── alg.h
├── lib
│ ├── build
│ └── CMakeLists.txt
├── main.c
├── main.h
├── README.md
└── src
└── alg.c

  我们要将alg.c和alg.h编译为动态库(*.so)和静态(*.a)库。在lib路径下编辑如下CMakeLists.txt文件。

1
2
3
4
5
6
7
cmake_minimum_required(VERSION 3.0)
project(litchi_lib)
include_directories(../inc)
aux_source_directory(../src SRC_LIST)
add_library(DynLibName SHARED ${SRC_LIST}) # Output dynamic library.
add_library(StcLibName STATIC ${SRC_LIST}) # Output static library.
set(LIBRARY_OUTPUT_PATH .) # Set library output path.

  指定了生成库文件所需的.c和.h文件,指定了要生成动态和静态库,指定了动态库生成的路径位置。
  生成的库文件名前会自动添加lib前缀,这个前缀建议保留。
  输出结果为。

1
2
╰─ ls
CMakeCache.txt CMakeFiles cmake_install.cmake libDynLibName.so libStcLibName.a Makefile