autotools学习

autotools的基本原理是考虑如何自动地生成makefile文件。用于linux下源代码方式发布软件。

autotools生成makefile文件步驟:

(1)在项目根录目用autoscan生成configure.scan文件,该文件是configure.in文件的模板。

   $autoscan

(2)修改configure.scan文件,并改名为configure.in。用于生成configure脚本

(3)因为configure.in文件里用了M4宏,所以要用M4预处理器aclocal处理一下

   $aclocal

           生成aclocal.m4脚本

(4)运行autoconf生成configure脚本,这个过程相当于高级语言的编译过程,编绎configure.in生成configure脚本。此时configue.in和aclocal.m4没用了,删除都行。autoconf主要检查configure.in有无语法错误和有无aclocal.m4文件,并生成configure。

   $autoconf

(5)手工编辑一个文本文件――Makefile.am,用于生成Makefile.in,该文件是Makefile模板.

(6)运行automake生成Makefile.in等文件。

(7)运行configure生成Makefile文件。


举个例子:

  下面以一个简单的例子来说明。假设要发布一个标准的hello程序,它打出“Hello, world!”的文字,该源程序命名为hello.c。在这个目录下(注意只有源文件hello.c,不需要编译hello.o或者hello),首先执行命令autoscan:

  $autoscan

  这样会生成configure.scan文件,它包含了系统配置的基本选项。作为一个简单的例子,其中很多东西是不需要的,所以可以修改这个文件,让它仅仅包含下面几行:

  AC_INIT(hello.c)

  AM_INIT_AUTOMAKE(hello, 0.1)

  AC_PROG_CC

  AC_OUTPUT(Makefile)

  然后把这个文件复制为configure.in,作为配置的输入文件。

  由于使用了m4宏(AM_INIT... 语句),必须运行aclocal命令生成相应的宏文件:

  $aclocal

  在当前目录中会产生aclocal.m4文件。

  然后执行autoconf,以生成configure执行脚本:

  $autoconf

  这样关于配置的部分就完成了,下面是和编译生成有关的。

  我们需要手工编辑一个文本文件――Makefile.am,内容如下:

  AUTOMAKE_OPTIONS=foreign

  bin_PROGRAMS=hello

  hello_SOURCES=hello.c

  这个文件应该很好理解,foreign告诉系统这是一个普通的应用软件,该程序名称为hello,而hello程序包含的源程序(SOURCES)只有hello.c这个文件。接着执行:

  $automake --add-missing

  automake会自动生成所有必须的文件,包括Makefile.in等重要文件。

  最后进行make dist压缩、打包,整个工作就完成了。

  获得这个压缩包的用户只需要进行解包,make和make install,就可以顺利地得到hello应用程序了。

你可能感兴趣的:(linux,工作,脚本,语言,makefile,output)