cmake的使用方法: 编译生成库文件

一.  简介

前面文章学习了针对单个 .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 序。

三.  更改生成的库文件名字

本例中有一点非常不爽,生成的库为 liblibhello.a ,名字非常不好看;如果想生成 libhello.a 该怎么办?
直接修改 add_library 命令的参数,像下面这样可以吗?
答案是不行的,因为 hello 这个目标已经存在了( add_executable(hello main.c)),目标名对于整个工程来说是唯一的,不可出现相同名字的目标,所以这种方法肯定是不行的, 实际上我们只需要在 CMakeLists.txt 文件中添加下面这条命令即可:
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
set_target_properties 用于设置目标的属性,这里通过 set_target_properties 命令对 libhello 目标的OUTPUT_NAME 属性进行了设置,将其设置为 hello

CMakeLists.txt 文件经过更改后,内容如下:

cmake_minimum_required(VERSION 3.5)
project(HELLO)
add_library(libhello SHARED hello.c)
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
add_executable(hello main.c)
target_link_libraries(hello libhello)

可以看出,除了添加 set_target_properties 命令之外,我们还加入了 cmake_minimum_required 命令,该命令用于设置当前工程的 cmake 最低版本号要求,当然这个并不是强制性的,但是最好还是加上。

进入到 build 目录下,使用 cmake+make 编译整个工程:
cd build/
cmake ../
make
编译完成之后会发现,生成的库文件为 libhello.a

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值