前面提到使用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高手了。我就帮你到这里了,你也可以成为编译的高手哦。