一. 简介
前面文章学习了针对单个 .c文件,cmake 工具是如何编译的?
针对包含多个 .c文件,cmake工具又是如何编译的?文章如下:
cmake的使用方法: 单个源文件的编译-CSDN博客
cmake的使用方法: 多个源文件的编译-CSDN博客
本文来学习,cmake工具如何编译成静态库或动态库文件?
二. cmake的使用方法: 生成库文件
如果需要将 hello.c 编译为静态库文件或者动态库文件。则 CMakeLists.txt 文件需要进行修改,
CMakeLists.txt
文件修改后内容
如下:
project(HELLO)
add_library(libhello hello.c)
add_executable(hello main.c)
target_link_libraries(hello libhello)
进入到
build
目录下,执行
cmake
、再执行
make
编译工程,编译完成之后,在
build
目录下就会生成可执行文件
hello
和库文件,即在该工程根目录下,依次输入如下命令:
cd build/
cmake ../
make
在
build
目录下就会生成可执行文件
hello
和库文件,如下所示:
CMakeLists.txt 文件解释
本例中我们使用到了
add_library
命令和
target_link_libraries
命令。
add_library 命令用于生成库文件,在本例中我们传入了两个参数,第一个参数表示库文件的名字,需要注意的是,这个名字是不包含前缀和后缀的名字;
注意:在 Linux 系统中,库文件的前缀是 lib,动态库文件的后缀是.so,而静态库文件的后缀是.a;所以,意味着最终生成的库文件对应的名字会自动添加上前缀和后缀。
第二个参数表示库文件对应的源文件。
add_library 命令生成了一个静态库文件 liblibhello.a,如果要生成动态库文件,可以这样做:
add_library(libhello SHARED hello.c) #生成动态库文件
add_library(libhello STATIC hello.c) #生成静态库文件
target_link_libraries
命令为目标指定依赖库,在本例中
hello.c
被编译为库文件,并将其链接进
hello
程
序。