.so 依赖目录 cmake_CMake 静态库与动态库构建

点击蓝字

关注我们

        在前面一篇文章写了如何使用CMake编译“hello world”。这一篇写写构建静态库和动态库。

上一文章链接:《CMake,大型项目采用的构建工具》

对于静态库和动态库的了解,可以看看之前的文章:

静态库:《静态链接库的实现》

动态库:《动态链接库的实现》

在上一篇文章中,我们说了内部构建和外部构建的区别,接下来的例子我们使用外部构建。

我们在工程目录下建立CMakeLists.txt,lib目录,build目录。

CMakeLists.txt的内容如下:

PROJECT(RICE)ADD_SUBDIRECTORY(lib lib) #指定编译输出位置

在lib目录下建立源文件rice.c和rice.h,建立CMakeLists.txt文件。

rice.c的内容如下:
#include "rice.h"void rice_func(){        printf("rice func\n");}
rice.h的内容如下:
#ifndef __RICE_H#define __RICE_H#include void rice_func();#endif
CMakeLists.txt的内容如下:
SET(LIBRICE_SRC rice.c)ADD_LIBRARY(rice STATIC ${LIBRICE_SRC})

制作库的工程模板制作好后,进行编译,在build目录下进行编译,如下:

$ cmake ..省略。。。$ make省略。。。$ cd lib$ lsCMakeFiles  cmake_install.cmake  librice.a  Makefile$ 
编译完,在lib目录下生成了librice.a这个静态库。在上面的CMakeLists.txt中,多了一个指令ADD_LIBRARY :
指令ADD_LIBRARY
语法ADD_LIBRARY(libname
                              [SHARED|STATIC|MODULE]
                              [EXCLUDE_FROM_ALL]
                              source1 source2 ... sourceN)
说明类型有三种:SHARED,动态库STATIC,静态库MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。EXCLUDE_FROM_ALL,参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手工构建。

根据ADD_LIBRARY指令的描述,在上面的例子中,很清楚的理解是生成静态库的操作。

那么将上面的ADD_LIBRARY(rice STATIC ${LIBRICE_SRC})替换成ADD_LIBRARY(rice SHARED ${LIBRICE_SRC})编译生成的就是动态库。

安装共享库和头文件:只需要对lib文件夹下的CMakeLists.txt增加install指令,如下:

SET(LIBRICE_SRC rice.c)ADD_LIBRARY(rice SHARED ${LIBRICE_SRC})INSTALL(TARGETS rice LIBRARY DESTINATION lib)    #安装共享库INSTALL(FILES rice.h DESTINATION include/rice)   #安装头文件
执行命令:
$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..省略。。。$ make省略。。。$ make install省略。。。#查看共享库是否安装成功/usr/lib$ ls librice.so librice.so/usr/lib$#查看头文件是否安装成功/usr/include/rice$ lsrice.h/usr/include/rice$
可以看到,已经安装到指定的目录。有写的不对的地方,欢迎找作者探讨。。 e7e2558f9b786b150408fbc1098ffe91.gif 61d4b5652d6f2dbdb451af39846f6514.gif f5f7cbccf5d9cb756f303524f25e50f4.gif

我将持续更新文章和学习资料

可加作者的微信一起交流学习

f5f7cbccf5d9cb756f303524f25e50f4.gif

---作者微信号:wueroo1314---

获取交流群,请添加作者微信

饭仔DIY

微信号 : Rice_DIY

技术 | 开源 | 分享 

长按关注。。。

dfd506f59f01c9a81ddbae0e5814295e.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值