CMake教程09-选择静态或者动态库

CMake教程09-选择静态或者动态库

本节我们将介绍如何使用BUILD_SHARED_LIBS变量控制add_library()的默认行为,并允许控制没有显式类型 ( STATIC, SHARED, MODULEor OBJECT) 的库的构建方式。

我们修改项目根目录下的CMakeLists.txt文件,添加option()选项控制开关,内容如下:

cmake_minimum_required(VERSION 3.10)

# 设置项目名称和版本号
project(FirstProject VERSION 1.0)

# 设置C++标准支持
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# control where the static and shared libraries are built so that on windows
# we don't need to tinker with the path to run the executable
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")


# 此选项可以被修改,避免每次修改config.h.in文件
option(USE_MYFUNC "使用自定义库文件" ON)

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

# 配置文件
configure_file(config.h.in config.h)

就这样,我们可以重新构建一下,运行命令:

cmake ../ch09
make

构建成功后,我们就可以在构建目录下看到了libmyfunc.so动态库文件了。

如果我们想要使用静态库,可以运行下面命令,重新构建:

cmake ../ch09 -DBUILD_SHARED_LIBS=OFF
make

此时,我们生成的是静态库libmyfunc.a,而可执行程序不再依赖libmyfunc.so动态库。

本节,我们了解了如何让CMake选择是生成动态库还是静态库,动态库可以代码复用、便于功能扩展,而使用静态库可以减少依赖和动态库不同版本兼容等问题。无论怎样选择,CMake都可以做到。


转载本文时请注明出处及本文链接地址CMake教程09-选择静态或者动态库

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注