automake动态库
来源:互联网 发布:御坂网络ssr 编辑:程序博客网 时间:2024/05/16 18:19
AUTOMAKE_OPTIONS=foreign
INCLUDES=-I$(top_srcdir)/libpr/include -I$(top_srcdir)/vt/include
noinst_PROGRAMS =libvt.so
libvt_so_SOURCES=vty/vtcmd.c vty/vtdrv.c vty/vty.c vty/evtd.c telnet/telcmd.c telnet/teldrv.c telnet/telnegot.c telnet/telsvr.c telnet/telsess.c vty/defcmd.c vty/vtobj.c
libvt_so_LDFLAGS = -fPIC -shared
libvt_so_LDADD=$(top_srcdir)/libpr/libpr.a
bin_PROGRAMS = test_telnetd
test_telnetd_SOURCES = test/test_telnetd.c
test_telnetd_LDADD=$(top_srcdir)/libpr/libpr.a libvt.so
上面这段代码是从我的一个工程的Makefile.am中摘抄过来的,使用不少技巧。
1、动态库实际上也是ELF格式,所以我们使用PROGRAMS宏,automake将他按执行文件规格设置环境,如果使用noinstall_LIBRARIES那么就变成*.a静态库了。
2、因为是动态库,所以我们有必要加入-fPIC -shared
3、test_telnetd需要调用libvt.so,所以他们之间存在依赖关系。我们将libvt.so直接添加在LDADD中,automake会自动他们建立依赖关系,在Makefile中可以到test_telnetd_DEPENDENCIES,里面包含libvt.so。
这里有几个要紧需要注意:
1、$(bin_PROGRAMS)编译顺序在$(noinstall_PROGRAMS)之前,因为test_telnetd需要libvt.so,所以会找不到libvt.so。
2、在LDADD中如果使用-lvt不会建立依赖关系,如果使用$(top_srcdir)/vt/libvt.so也不行。
3、实际上如果不行的话,我们可以直接使用test_telnetd_DEPENDENCIES来指定libvt.so
4、如果需要make install 安装libvt.so到lib,那么使用XXX_PROGRAMS=...的方法,然后指定XXXbin=...就行了。类似于bin_PROGRAMS。
这里使用到的技巧都很有用,值得记录下来。
- automake动态库
- automake 生成动态链接库 - automake&Makefile
- automake生成动态链接库
- automake生成动态链接库
- automake生成动态链接库
- automake生成动态链接库
- 【C/C++】automake生成动态链接库
- 一个 autoconf / automake 例子 --- 静态库、动态库 多源文件
- 一个 autoconf / automake 例子 --- 静态库、动态库 多源文件
- 一个 autoconf / automake 例子 --- 静态库、动态库 多源文件
- 一个 autoconf / automake 例子 --- 静态库、动态库 多源文件
- 使用Automake 创建和使用静态库/动态库
- 一个 autoconf / automake 例子 --- 静态库、动态库 多源文件
- automake同时生成静态链接库和动态链接库
- autoconf / automake 例子(静态库、动态库 )
- automake同时生成静态链接库和动态链接库
- automake同时生成静态链接库和动态链接库
- 编译小结(7)Automake编译静态库与动态库
- 网址集合
- 《深入理解计算机系统》读书笔记
- 自增长列和序列的区别(identity与sequence的区别)
- Winrar的妙用
- JUnit和单元测试入门简介之一
- automake动态库
- 保存控制台信息
- C#自带Ftp下载的例子
- Verilog的层次化设计
- Acegi Security System使用 LDAP 目录服务器学习
- 编译glut-3.7.6时出现错误 error C2381: "exit": 重定义; __declspec(noreturn)
- freenas 用户权限管理
- 关于preg_replace函数的问题讲解
- informix和oracle中对于NULL约束设置的比较