makefile学习 (2) —— autotools生成makefile
2016-10-30 19:43
239 查看
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([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_INIT(main,1.0) AC_INIT_AUTOMAKE(main,1.0) AC_CONFIG_SRCDIR([main.c]) #AC_CONFIG_HEADERS([config.h]) AM_CONFIG_HEADERS([config.h])
AC_INIT(main,1.0)设置软件名称和版本
AC_CONFIG_HEADERS([config.h])修改成
AM_CONFIG_HEADERS([config.h]),主要因为后者比前者有更好的兼容性来生成makefile,打开共享库
如果有这样的提示:
warning: macro `AM_CONFIG_HEADERS' not found in library
那最好还是使用
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的信息。
Flavors: --cygnus assume program is part of Cygnus-style tree --foreign set strictness to foreign --gnits set strictness to gnits --gnu set strictness to gnu
foreign,automake会改用一般软件套件标准来检查;gnu是缺省设置,该级别下将尽可能地检查包是否服从GNU标准;gnits是严格标准。
bin_PROGRAMS定义要产生的执行文件名称。产生多个执行文件的话,用空格符隔开。
test_SOURCES定义需要的源文件。
在makefile.am中添加这样的内容:
AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main main_SOURCES=add.c sub.c multi.c int_div.c main.c
6. autoreconf
autoreconf -fmi #生成configure makefile.in missing等文件
因为单独使用automake经常出现
no proper invocation of AM_INIT_AUTOMAKE was found.的错误,所以这里使用
autoreconf -fmi
$ man autoreconf ... -f, --force consider all files obsolete -i, --install copy missing auxiliary files --no-recursive don’t rebuild sub-packages -s, --symlink with -i, install symbolic links instead of copies -m, --make when applicable, re-run ./configure && make ...
7. 生成makefile
./configure #生成makefile
8. make编译
make #编译、生成可执行文件
在这些都完成后,我们产生的文件有:
aclocal.m4 autom4te.cache config.h.in config.status depcomp int_div.o main.o makefile.in multi.o sub.o add.c autoscan.log config.h.in~ configure install-sh main makefile missing stamp-h1 add.o config.h config.log configure.in int_div.c main.c makefile.am multi.c sub.c
而且,对应的makefile好复杂,统计了一下行数
$ wc -l makefile 613 makefile
可以查看: http://note.youdao.com/noteshare?id=6abda37b23434cf6410500cc5b544547
它的执行结果:
$ ./main add: 12 sub: -4 multi: 32 div: 0.500000
我们自己写的话,myfile的行数只有15行:
mymain: add.o sub.o multi.o int_div.o main.o gcc -o mymain add.o sub.o multi.o int_div.o main.o add.o:add.c gcc -o add.o -c add.c sub.o:sub.c gcc -o sub.o -c sub.c multi.o:multi.c gcc -o multi.o -c multi.c int_div.o:int_div.c gcc -o int_div.o -c int_div.c main.o:main.c gcc -o main.o -c main.c clean: rm -f *.o
执行:
$ ./mymain add: 12 sub: -4 multi: 32 div: 0.500000
使用autotools是方便生成makefile,我们不用自己写。但是后期改动的话就不一定轻松了。
软件打包
利用autotools生成的makefile,我们可使用make dist进行程序的打包。make dist
这将生成
main-1.0.tar.gz,压缩包的名称由configure.scan / configure.in中的
AC_INIT(main,1.0) AC_INIT_AUTOMAKE(main,1.0)
决定的。
我们可以使用这个压缩包到一个新的环境中生成可执行文件
1. 解压
tar -zxvf main-1.0.tar.gz
2. 生成makefile
./configure
3. make编译生成可执行文件
make
如果可以,还能继续下面的步骤:
4. 软件安装
make install
5. 清除可执行文件与目标文件
make clean
相关文章推荐
- autotools实现makefile的自动生成
- 借助 GNU autotools 生成 makefile 的简易流程
- autotools生成makefile文件实例
- autotools生成Makefile(二)
- Makefile文件生成 GNU Autotools的使用方法
- autotools生成makefile文件实例
- autotools & makefile
- Linux Automake工具生成Makefile软件实现步骤
- Tips: 使用autotools生成动态.so库文件 / Generate .so library files using autotools in Solaris and Linux
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门
- jetway_loves_programming之linuxC学习之Linux 下Makefile的automake生成简单例子
- 使用Linux auto Makefile自动生成的运行步骤
- automake&autoconf生成makefile【转载】
- automake 生成 makefile 简单介绍
- 运用Autoconf和Automake生成Makefile的学习之路
- 运用Autoconf和Automake生成Makefile的学习之路
- Use Autotools to Produce Makefile
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门(转)
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门