automake中Makefile.am和configure.ac的格式及编译过程
来源:互联网 发布:坚持做某件事 知乎 编辑:程序博客网 时间:2024/04/29 13:50
(一)写Makefile.am
当写完代码之后,在代码所在的目录src中,编写Makefile.am文件,其内容如下:
bin_PROGRAMS = ap_collector ap_server#Add extra debug info for gdbAM_CFLAGS = -ggdbACLOCAL_AMFLAGS = -I m4# libnfdump sourcesipmap = ip_map.c ip_map.hgetregion = get_region.c get_region.hpbkafka = pb_kafka.c pb_kafka.hprotobuf = proto/sflow.pb-c.c proto/sflow.pb-c.hfilelist = file_list.c file_list.hredisclient = redis_client.c redis_client.hparsefile = parse_file.c parse_file.hgetconfig = parse_config.c parse_config.hap_collector_SOURCES = $(ipmap) $(getregion) $(filelist) $(parsefile) $(redisclient) $(getconfig)ap_collector_LDADD = -lhiredis -lmysqlclientap_server_SOURCES = region_aggr.c $(ipmap) $(pbkafka) $(protobuf) $(getconfig)ap_server_LDADD = -lhiredis -lrdkafka -lprotobuf-c
其中,bin_PROGRAMS为要生成的可执行文件名,可以为多个。
AM_CFLAGS = -ggdb为开启调试。
ACLOCAL_AMFLAGS = -I m4,当使用libtoolize生成config.guess, config.sub, ltmain.sh, ltconfig时需要设置这个位置。
接下来定义源码。每个二进制文件都有相应的源码和所需的静态链接库。
在源码的父目录中,编辑Makefile.am,添加含有Makefile.am的子目录:
ACLOCAL_AMFLAGS = -I m4SUBDIRS = . src
(二)autoscan
在工作目录中执行autoscan,会生成configurae.scan。修改configure.scan内容之后,命名为configure.ac。
# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.69])#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])AC_INIT([analysis_region, 1.0.1, xx@xx.com)#AC_CONFIG_SRCDIR([src/pb_kafka.h])#AC_CONFIG_HEADERS([config.h])AM_INIT_AUTOMAKE([subdir-objects])AC_CONFIG_MACRO_DIR([m4])# Checks for programs.AC_PROG_CCAM_PROG_CC_C_OAC_PROG_LIBTOOLAC_SUBST(LIBTOOL_DEPS)AC_PROG_GREPAC_PROG_NMAC_PROG_SED# Checks for libraries.# FIXME: Replace `main' with a function in `-lhiredis':AC_CHECK_LIB([hiredis], [main])# FIXME: Replace `main' with a function in `-lmysqlclient':AC_CHECK_LIB([mysqlclient], [main])# FIXME: Replace `main' with a function in `-lrdkafka':AC_CHECK_LIB([rdkafka], [main])# Checks for header files.AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdint.h stdlib.h string.h sys/socket.h sys/time.h syslog.h unistd.h])# Checks for typedefs, structures, and compiler characteristics.AC_C_INLINEAC_TYPE_INT64_TAC_TYPE_SIZE_TAC_CHECK_HEADER_STDBOOLAC_TYPE_UINT16_TAC_TYPE_UINT32_TAC_TYPE_UINT8_T# Checks for library functions.AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINKAC_FUNC_MALLOCAC_FUNC_MKTIMEAC_FUNC_MMAPAC_FUNC_REALLOCAC_CHECK_FUNCS([gettimeofday memset strchr strdup strerror strndup])AC_CONFIG_FILES([Makefile src/Makefile])#AC_OUTPUT(Makefile src/Makefile)AC_OUTPUT()
如上,增加一下3行内容:
AM_INIT_AUTOMAKE([subdir-objects]) #多层目录的automakeAC_CONFIG_MACRO_DIR([m4]) #用于libtoolize
AM_PROG_CC_C_O #子目录的编译
至此,configure.ac就完成了
(三)执行libtoolize
生成config.guess, config.sub, ltmain.sh, ltconfig
(四)执行aclocal
生成aclocal.m4
(五)执行autoconf
生成configure文件
(六)执行automake --add-missing
生成Makefile.in文件
(七)执行./configure --prefix=`pwd`
生成Makefile文件
(八)执行make && make install
将可执行二进制文件安装到当前目录的./bin/下
至此,使用autoconf和automake编译完成,最终目录下的文件如下图所示:
附学习过程中参考的一篇关于autotool介绍的博客,写得不错:https://my.oschina.net/qihh/blog/66113
- automake中Makefile.am和configure.ac的格式及编译过程
- automake中Makefile.am和configure.ac的格式及编译过程
- 懒人学习automake, Makefile.am,configure.ac
- 懒人学习automake, Makefile.am,configure.ac
- configure.ac和makefile.am
- configure.ac和makefile.am
- Linux的automake出现的问题(Makefile.am: C objects in subdir but `AM_PROG_CC_C_O' not in `configure.ac')
- automake连载---关于两个文件configure.in和Makefile.am的编写
- automake连载---关于两个文件configure.in和Makefile.am的编写
- 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile
- automake中Makefile.am文件的学习
- linux下autoscan, aclocal, autoconf, automake以及Makefile.am, Configure.in等文件和工具的使用
- linux下autoscan, aclocal, autoconf, automake以及Makefile.am, Configure.in等文件和工具的使用
- 源码目录下只有configure.ac文件和Makefile.am文件
- 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
- 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
- Linux下利用makefile.am和configure.in产生可安装源码包过程整理
- configure, Makefile.am, Makefile.in,Makefile之间的关系
- eclipse常用快捷键
- hdu1237简单计算器-栈实现
- 从零开始学大数据-----Java基础篇之Java的环境搭建
- STM32硬件IIC之DMA传输数据
- iOS逆向之分析微信导航栏实现
- automake中Makefile.am和configure.ac的格式及编译过程
- DICOM中的UID
- Swift 界面
- Git学习笔记
- eclipse 项目中 怎么重新编译整个工程?
- 杨小白信箱
- okvis安装笔记之网址连接
- Java常用设计模式的使用场景
- 数据结构 二叉树的创建 关于二级指针的问题