本文是 cmake 使用的第三篇,主要介绍如何创建一个静态库并引用
上一篇的链接为:https://blog.csdn.net/QCZL_CC/article/details/119825103,主要介绍如何包含头文件。
示例目录结构如下:
02-static-library/
├── CMakeLists.txt
├── include
│ └── static
│ └── hello.h
└── src
├── hello.c
└── main.c
将使用 02-static-library/include/static/hello.h 和 02-static-library/src/hello.c 创建一个静态库 libhello_library.a,然后链接到 02-static-library/src/main.c,最终生成可执行文件
CMakeLists.txt 规则如下:
# cmake 最低版本号
cmake_minimum_required(VERSION 3.5)
# 项目名称
project(hello_library)
################################################
# 创建库
################################################
# 从库源生成静态库,用于创建一个名为 libhello_library.a 的静态库
add_library(hello_library STATIC
src/hello.c
)
# 将范围设置为 PUBLIC,这将导致包含的目录在以下地方使用:
# 编译库时
# 编译链接库的任何其他目标时
# 其他的范围描述如下:
# PRIVATE - 目录被添加到这个目标的包含目录中
# INTERFACE - 该目录将添加到链接此库的任何目标的包含目录中
# PUBLIC - 包含在此库中以及链接此库的任何目标中
target_include_directories(hello_library
PUBLIC
${PROJECT_SOURCE_DIR}/include
)
################################################
# 创建可执行文件
################################################
add_executable(hello_binary
src/main.c
)
# 将新的 hello_library 目标与 hello_binary 目标链接起来
# 这告诉 CMake 在链接期间将 hello_library 链接到 hello_binary 可执行文件。它还将从链接库目标传播具有 PUBLIC 或 INTERFACE 范围的任何包含目录
target_link_libraries(hello_binary
PRIVATE
hello_library
)
构建过程:
1:mkdir build 创建该目录的目的是为了将编译产物和源文件分离
2:cd build && cmake .. cmake 后面第一个参数应该是 CMakeLists.txt 文件所在目录。此实例中 CMakeLists.txt 在 build 目录的上一级,所以使用 cmake ..
3:make
下一篇:https://blog.csdn.net/QCZL_CC/article/details/119825506,主要介绍如何创建一个动态库并引用。