自动编译脚本续一

前面提到使用Makefile可以自动枚举目录下所有的文件进行编译,这对于单个项目来说还比较方便,但如果这个项目要生成多个应用及库文件时,这种方式就有很大局限性了。幸亏有强大的开源团队,为我提供了automake工具。具体的原理大家在网络上可以很方便的找到,我这里就直接一步到位,给大家行个方便,给出最初级的使用automake的方式。

这里我们主要需要三个文件

autogen.sh

Makefile.am

configure.ac

 

1)调用autogen通过Makefile.am和configure.ac生成configure文件

2)通过configure生成Makefile文件

3)就可以make来编译,make install来安装文件了。

autogen.sh最简单就一句话

autoreconf -fis

 Makefile.am里面定义代码相关的信息,如编译一个a.bin

bin_PROGRAMS = a               //生成应用a
lib_LIBRARIES = a.a              //生成静态库a.a
lib_LTLIBRARIES = a.la           //生成动态库a.la

a__SOURCES = a.c                //定义使用的源码
a_la_SOURCES = a.c
a_a_SOURCES = a.c

a_CFLAGS=
a_CPPFLAGS=
a_LDFLAGS=

include_HEADERS = a.h         //安装时导出的头文件

 configure.ac中定义软件的版本及用到的库,头文件等,甚至一些数据模式,具体可网络搜索configure.ac中的宏定义,下面一个极简例子

AC_PREREQ([2.69])
AC_INIT([a.a], [0.1])
AC_CONFIG_SRCDIR([a.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.9])

# Checks for programs.
AC_PROG_CPP
AC_PROG_CXX
AC_PROG_CC
# Checks for libraries.

AC_CHECK_LIB([m], [sqrt])

AC_CHECK_HEADERS([fcntl.h limits.h stddef.h stdint.h stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT64_T
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_TYPE_UINT8_T

# Checks for library functions.
AC_FUNC_MALLOC
AC_CHECK_FUNCS([memset])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

 照着抄,改改就是啦,需要扩展时候去查查相关configure.ac和Makefile.am中的宏定义,你也成了automake高手了。我就帮你到这里了,你也可以成为编译的高手哦。

posted @ 2018-03-07 21:18  marf.cn  阅读(273)  评论(0编辑  收藏  举报