autotools生成makefile
利用autotools系列工具可以快速生成makefile,我们输入目标文件,依赖文件,文件目录等信息即可。
我们需要保证有这些工具:aclocal, autoscan, autoconf, autoconf, autoheader, automake.
在安装的时候仅仅需要指令 yum install automake
或 sudo apt-get install automake
即可
还是以四则运算的例子来说明这套工具的使用
在当前目录中,我们有文件:
add.c sub.c multi.c int_div.c main.c
借百度百科的makefile相册一用,这是autotools工具的使用流程:
1. autoscan
autoscan # 检查源文件
这将产生新文件:autoscan.log configure.scan
2. 修改文件configure.scan
主要修改部分是
AC_INIT(main,1.0)
设置软件名称和版本
AC_CONFIG_HEADERS([config.h])
修改成AM_CONFIG_HEADERS([config.h])
,主要因为后者比前者有更好的兼容性来生成makefile,打开共享库
如果有这样的提示:
那最好还是使用AC_CONFIG_HEADERS([config.h])
吧
然后将configure.scan改名成为configure.in
mv configure.scan configure.in
3. aclocal
aclocal #生成aclocal.m4文件 or autom4te.cache
4. autoheader
autoheader #生成config.in文件
5. 建立makefile.am文件
这里有几个参数需要说明:
AUTOMAKE_OPTIONS是automake的选项,下面是man的信息。
foreign,automake会改用一般软件套件标准来检查;gnu是缺省设置,该级别下将尽可能地检查包是否服从GNU标准;gnits是严格标准。
bin_PROGRAMS定义要产生的执行文件名称。产生多个执行文件的话,用空格符隔开。
test_SOURCES定义需要的源文件。
在makefile.am中添加这样的内容:
6. autoreconf
autoreconf -fmi #生成configure makefile.in missing等文件
因为单独使用automake经常出现no proper invocation of AM_INIT_AUTOMAKE was found.
的错误,所以这里使用autoreconf -fmi
7. 生成makefile
./configure #生成makefile
8. make编译
make #编译、生成可执行文件
在这些都完成后,我们产生的文件有:
而且,对应的makefile好复杂,统计了一下行数
可以查看: http://note.youdao.com/noteshare?id=6abda37b23434cf6410500cc5b544547
它的执行结果:
我们自己写的话,myfile的行数只有15行:
执行:
使用autotools是方便生成makefile,我们不用自己写。但是后期改动的话就不一定轻松了。
软件打包
利用autotools生成的makefile,我们可使用make dist进行程序的打包。
make dist
这将生成main-1.0.tar.gz
,压缩包的名称由configure.scan / configure.in中的
决定的。
我们可以使用这个压缩包到一个新的环境中生成可执行文件
1. 解压
tar -zxvf main-1.0.tar.gz
2. 生成makefile
./configure
3. make编译生成可执行文件
make
如果可以,还能继续下面的步骤:
4. 软件安装
make install
5. 清除可执行文件与目标文件
make clean