一年十二月  谁主春秋
关注:基础系统工程 密码学 人工智能
C++博客
首页
新随笔
联系
聚合
管理
随笔-152 评论-223 文章-30 trackbacks-0
Shell应用(10):支持开源库编译的Makefile
脚本源码
由于很多应用项目依赖诸多第三方开源库,这些开源库各有不同的核心目录、库目标和输出位置,这里的核心目录是指
仅产生so库
的工程目录,库目标是指
仅产生so库
的make目标,输出位置是相对于核心目录的,但不必是子目录,可用..来回溯到父目录的某位置,更高层目录的位置,依次类推。为了统一支持它们,使用了一些技巧,详见示例脚本如下
1
.PHONY: all clean lib core
2
3
thirdlib
=
openssl
-
1.0
.1u
?
build_ssl ACE_wrappers
/
ace json ncurses
-
6.0
??
lib
4
coremod
=
main
5
6
dir
=
`echo $@ | awk
-
F?
'
{print $$1}'`
7
aim
=
`echo $@ | awk
-
F?
'
{print $$2}'`
8
out
=
`echo $@ | awk
-
F?
'
{print $$3}'`
9
10
copy
=\
cp
-
Pf
${dir}
/
${out}
/*
.so
*
output
11
12
define MAKE_SUBDIR
13
echo
"
${dir},${aim},${out}
"
;
\
14
if
[
"
$(MAKECMDGOALS)
"
!
=
"
clean
"
];
then
\
15
$(MAKE)
${aim}
-
C
${dir}
;
\
16
if
[
"
$$is_cp
"
-
eq
"
1
"
];
then
\
17
$(copy);
\
18
fi
\
19
else
\
20
$(MAKE)
clean
-
C ${dir};
\
21
fi
22
endef
23
24
all: lib core
25
26
lib: $(thirdlib)
27
28
$(thirdlib)::
29
@
is_cp
=
1
; $(MAKE_SUBDIR)
30
31
core: $(coremod)
32
33
$(coremod)::
34
@
is_cp
=
0
; $(MAKE_SUBDIR)
35
36
clean: $(thirdlib) $(coremod)
实现技巧
1)使用?作为分隔符,所分隔的3个域依次为核心目录、库目标、输出位置;使用awk来获取各域,分别为dir、aim和out;在运行过程中,值dir一定非空,而aim为空则表示默认目标,out为空表示输出位置即为dir目录。
2)copy为命令变量,功能为每当一个库编译完成后,将输出的so库拷贝到output下,并保持软链接;对于有的开源库,需在编译前,使用对应的选项来调用configure,使其生成so库。
3)为了重用代码,定义了MAKE_SUBDIR命令包,参数变量为is_cp,当is_cp为1时,表示当前编译的是依赖库,否则是主程序。
4)thirdlib和coremod为依赖文件,使用了双冒号规则,这样一来,只要在thirdlib中加入新的依赖库,指定核心目录、库目标和输出位置即可,其它地方不用改。
posted on 2016-10-19 15:11
春秋十二月
阅读(3229)
评论(0)
编辑
收藏
引用
所属分类:
System
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Windows异常分发与子系统图表集 -- 摘自Windows内核原理与实现
浅谈Linux共享库库函数挂钩检测
kretprobe探究思考
基于Rust构建WebAssembly
基于VSS可传输卷影拷贝的备份架构
Shell(11): 创建和删除so库软链接
关于make依赖文件的自动生成
Shell应用(10):支持开源库编译的Makefile
Shell应用(9):自动化批量编译
一种拦截Linux动态库API的方法及装置
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
本博客所有随笔均为原创,因为不定期维护更新,所以转载请注明出处,如有问题和建议,请留言或评论,发表您的宝贵意见,藉此平台以分享交流、共同进步。
联系方式:微信theory-math
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(62)
给我留言
查看公开留言
查看私人留言
随笔分类
(151)
Algorithm(39)
C/C++(24)
Compiler(25)
Compute Theory(5)
Database(4)
Network(17)
Opensrc(13)
System(24)
随笔档案
(152)
2024年6月 (1)
2024年5月 (1)
2024年4月 (1)
2024年3月 (2)
2024年2月 (2)
2023年12月 (1)
2023年11月 (2)
2023年10月 (2)
2023年9月 (37)
2021年12月 (1)
2021年10月 (1)
2021年9月 (1)
2021年2月 (1)
2020年5月 (3)
2020年4月 (1)
2019年11月 (4)
2019年7月 (1)
2018年11月 (1)
2017年12月 (1)
2016年12月 (1)
2016年11月 (2)
2016年10月 (1)
2016年9月 (1)
2016年8月 (3)
2016年7月 (4)
2016年5月 (1)
2015年10月 (2)
2015年9月 (1)
2015年6月 (2)
2015年5月 (3)
2015年2月 (1)
2015年1月 (1)
2014年12月 (2)
2014年4月 (2)
2014年3月 (1)
2014年1月 (1)
2013年10月 (1)
2013年9月 (1)
2013年8月 (3)
2013年5月 (1)
2013年3月 (1)
2012年11月 (1)
2012年9月 (3)
2012年8月 (1)
2012年7月 (1)
2012年6月 (5)
2012年5月 (3)
2011年12月 (5)
2011年11月 (1)
2011年10月 (5)
2011年8月 (7)
2011年7月 (6)
2011年6月 (6)
2010年6月 (1)
2009年12月 (1)
2009年8月 (1)
2009年7月 (1)
2009年6月 (1)
2009年4月 (3)
文章分类
(30)
诗词作品集(30)
关注的开源项目
LLVM
编译系统
nginx
高性能Web服务器
OpenSSL
密码学库
suricata
网络IPS引擎
最新随笔
1. 简单私钥加密构造的验证及安全性分析
2. 二元有限域及其扩域上的计算
3. 简单连分数攻击RSA的迭代次数分析
4. 有限循环群的结构及生成元的判定
5. 混合线性同余发生器的引理验证
6. Blum数的基本定理及应用
7. 关于(零知识)计算复杂性的总结
8. 一个积分攻击定理的证明
9. 浅谈体系结构与内联优化
10. 浅谈对称加密算法的软件实现
积分与排名
积分 - 397427
排名 - 58
最新评论
1. re: 一种拦截Linux原始套接字IO的方法[未登录]
很有前途和很有钱途啊。
--chipset
2. re: 一种拦截Linux原始套接字IO的方法[未登录]
@chipset
是的
--春秋十二月
3. re: 一种拦截Linux原始套接字IO的方法[未登录]
工作是做网络安全?
--chipset
4. re: 一种使用函数指针实现状态机的方法
函数指针实现状态机
--linda
5. re: 多标签视图类CTabView的设计实现
为啥代码缺少一些呢,给新手个完整点的啊
--pekingliu
6. re: 工作线程与消息循环
从消息队列取出消息 mark了
--mmocake
7. re: 一种简单的跨平台套接字管道
评论内容较长,点击标题查看
--IT搬运工
8. re: 一种简单的跨平台套接字管道
windows仅支持af_init和af_init6地址族有错别字么?
af_init和af_init6
--IT搬运工
9. re: Shell应用(8):使用awk定位反汇编输出[未登录]
厉害
--Chipset
10. re: TCP分组丢失时的状态变迁
不错
--Binky
阅读排行榜
1. 基于OpenSSL实现的安全连接(13646)
2. 字符串16进制显示(12778)
3. 基于boost asio实现的ssl socket框架(12139)
4. Linux套接字与虚拟文件系统(1):初始化和创建(8506)
5. 关于数据库的一些学习研究心得(8030)
6. 使用CString GetBuffer自适应获取计算机名称(7912)
7. 使用正则表达式解析URL(7789)
8. basic_string内存泄露问题之分析解决(7597)
9. Shell应用(4): 使用sed删除行尾的^M字符(7530)
10. nginx iocp(1):tcp异步连接(7438)
评论排行榜
1. basic_string内存泄露问题之分析解决(19)
2. 求单向链表倒序第m个元素(11)
3. 基于顺序存储实现的多叉树(1):深度优先存储(9)
4. 字符大小写转换(7)
5. 面向对象锁框架的设计与实现(6)
6. 字符串16进制显示(6)
7. 工作线程与消息循环(5)
8. Shell应用(4): 使用sed删除行尾的^M字符(5)
9. 使用正则表达式解析URL(5)
10. 十进制整数千位分隔符(4)