首页 技术 正文
技术 2022年11月23日
0 收藏 573 点赞 4,191 浏览 3620 个字

一个简单的执行程序的GNU automake自动生成Makefile的方法及案例

在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写的,必须与GNU autoconf一并使用,具体的生成过程请参看GNU automake的wikipedia中的右下角的图,地址如下:http://en.wikipedia.org/wiki/Automake,由此图可看到使用自动生成Makefile的工具使用的流程,步骤主要如下:

  1. autoscan
  2. 修改生成的configure.scan为configure.in
  3. aclocal
  4. autoheader
  5. autoconf
  6. 创建Makefile.am并进行具体内容的写入
  7. automake
  8. automake
  9. ./configure生成Makefile
  10. make得到可执行程序

光空说太抽象了,那么来一个简单的例子吧,

0. 创建一个printf("Hello world!\n")的小程序,创建目录hello后创建hello.c,

ufo@ufo:~/hello$ ls
hello.c

那么下一步即可开始automake的工作了,

1、使用autoscan生成configure.scan

ufo@ufo:~/hello$ autoscan
ufo@ufo:~/hello$ ls
autoscan.log configure.scan hello.c
ufo@ufo:~/hello$ aclocal
aclocal: `configure.ac' or `configure.in' is required

2、在上一步中直接执行aclocal时出现以上的提示,那么就要将生成的configure.scan修改为configure.ac或configure.in再进行aclocal的执行;

ufo@ufo:~/hello$ mv configure.scan configure.in
ufo@ufo:~/hello$ ls
autoscan.log configure.in hello.c

3、执行aclocal

ufo@ufo:~/hello$ aclocal
ufo@ufo:~/hello$ ls
autom4te.cache autoscan.log configure.in hello.c

4、执行autoheader

ufo@ufo:~/hello$ ls
autom4te.cache autoscan.log config.h.in configure.in hello.c

5、执行autoconf

ufo@ufo:~/hello$ autoconf
ufo@ufo:~/hello$ ls
autom4te.cache autoscan.log config.h.in configure configure.in hello.c

6、创建Makefile.am

ufo@ufo:~/hello$ vim Makefile.am
ufo@ufo:~/hello$ cat Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=hello.c

关于Makefile.am中的具体内容的意思是说生成的可执行文件的名称为hello,对应的源代码为hello.c。

7、执行automake

ufo@ufo:~/hello$ automake
configure.in: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.in: You should verify that configure.in invokes AM_INIT_AUTOMAKE,
configure.in: that aclocal.m4 is present in the top-level directory,
configure.in: and that aclocal.m4 was recently regenerated (using aclocal).
automake: no `Makefile.am' found for any configure output
automake: Did you forget AC_CONFIG_FILES([Makefile]) in configure.in?

这时出错了,是说configure.in文件中的AM_INIT_AUTOMAKE没有找到,只有修改configure.in

文件后再从第三步进行重新执行,configure.in中的AC_INIT行下添加

AM_INIT_AUTOMAKE(hello,1.0),格式为AM_INIT_AUTOMAKE(package,version),再修改AC_OUTPUT为AC_OUTPUT(Makefile);

修改完configure.in文件后,再次执行2~7;

8、执行automake

ufo@ufo:~/hello$ automake
configure.in:6: required file `./install-sh' not found
configure.in:6: `automake --add-missing' can install `install-sh'
configure.in:6: required file `./missing' not found
configure.in:6: `automake --add-missing' can install `missing'
Makefile.am: required file `./INSTALL' not found
Makefile.am: `automake --add-missing' can install `INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: required file `./COPYING' not found
Makefile.am: `automake --add-missing' can install `COPYING'
Makefile.am: required file `./depcomp' not found
Makefile.am: `automake --add-missing' can install `depcomp'

按照提示创建缺少的文件,

ufo@ufo:~/hello$ touch NEWS README AUTHORS ChangeLog

再执行:

ufo@ufo:~/hello$ automake --add-missing

没有出错的情况下再次执行automake;

ufo@ufo:~/hello$ ls
aclocal.m4 ChangeLog configure.in INSTALL missing
AUTHORS config.h.in COPYING install-sh NEWS
autom4te.cache config.h.in~ depcomp Makefile.am README
autoscan.log configure hello.c Makefile.in

此时已经生成了生成Makefile文件的cinfigure脚本;

9、./configure生成Makefile

ufo@ufo:~/hello$ ls Makefile
Makefile

10、make得到可执行程序

ufo@ufo:~/hello$ make
make all-am
make[1]: 正在进入目录 `/home/ufo/hello'
gcc -DHAVE_CONFIG_H -I. -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c
mv -f .deps/hello.Tpo .deps/hello.Po
gcc -g -O2 -o hello hello.o
make[1]:正在离开目录 `/home/ufo/hello'
ufo@ufo:~/hello$ ls
aclocal.m4 config.h configure hello.c Makefile.am stamp-h1
AUTHORS config.h.in configure.in hello.o Makefile.in
autom4te.cache config.h.in~ COPYING INSTALL missing
autoscan.log config.log depcomp install-sh NEWS
ChangeLog config.status hello Makefile README
ufo@ufo:~/hello$ ./hello
Hello World!

这就是牛X的automake的例子;关于其中的细节日后有空再表了

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731