使用Autotools编译项目(上)
这是一篇旧文,未来会不断把之前写过的文章放到这个博客里面。
首先创建工作目录:
mkdir try-autotools
然后进入工作目录,创建helloworld.c:
int main() {
printf("Hello, world!");
}
然后,输入下面的命令:
% autoscan
获得configure.scan:
% ls
autoscan.log configure.scan helloworld.c
然后将configure.scan重命名为configure.in:
% mv configure.scan configure.in
接下来执行aclocal:
% aclocal
执行结束后系统多出个autom4te.cache目录:
% ls
autom4te.cache autoscan.log configure.in helloworld.c
此时执行autoheader:
% autoheader
生成config.h.in:
% ls
autom4te.cache config.h.in configure.in
autoscan.log configure helloworld.c
创建Makefile.am,内容如下:
bin_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c
接下来打开configure.in,在AC_INIT后面添加:
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
保存后退出。接下来使用touch命令创建如下文件:
% touch AUTHORS ChangeLog INSTALL NEWS README
然后执行:
% automake -a
会有一些告警日志,不管它。此时执行autoreconf,下面是执行结果及日志:
% autoreconf -vfi
autoreconf: Entering directory `.'
autoreconf: configure.in: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.in: tracing
autoreconf: configure.in: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.in:6: installing `./missing'
configure.in:6: installing `./install-sh'
autoreconf: Leaving directory `.'
此时目录中内容如下:
% ls
AUTHORS Makefile.am aclocal.m4 config.h.in~ helloworld.c
COPYING Makefile.in autom4te.cache configure install-sh
ChangeLog NEWS autoscan.log configure.in missing
INSTALL README config.h.in depcomp
工作基本到此结束了。我们现在可以使用生成好的configure命令试试看:
% ./configure
可以看到目录中生成了Makefile,执行make:
% make
make all-am
gcc -DHAVE_CONFIG_H -I. -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo -c -o helloworld.o helloworld.c
helloworld.c: In function 'main':
helloworld.c:2: warning: incompatible implicit declaration of built-in function 'printf'
mv -f .deps/helloworld.Tpo .deps/helloworld.Po
gcc -g -O2 -o helloworld helloworld.o
此时helloworld已经被编译了:
% ./helloworld
Hello, world!
最后我们清除中间文件:
% make distclean
再删除autom4te的cache:
% rm -rf autom4te.cache
就得到了干净的工程目录:
% ls
AUTHORS INSTALL NEWS config.h.in depcomp missing
COPYING Makefile.am README configure helloworld.c
ChangeLog Makefile.in aclocal.m4 configure.in install-sh
将目录打包,就可以进行软件分发了。