linux使用---automake学习(从原理到实践,一步步完成automake)

目录

生成configure过程中各文件之间的关系图

详细介绍

 准备工作:

三、实例

2.操作步骤

(1)安装依赖的包

(2)autoscan

(3)aclocal

(3)autoconf

(4)autoheader

(5)Makefile.am

(6)automake

(7)测试

 (7)打包


生成configure过程中各文件之间的关系图

linux使用---automake学习(从原理到实践,一步步完成automake)_第1张图片

详细介绍

autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。

aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”

automake:将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换 为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它 会自己产生config.guess和config.sub

autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。

 准备工作:

安装autoscan,

 sudo apt-get install automake

三、实例

我的文件是c++文件,这里创建一个hello.cpp文件,里面的内容如下:

#include 

using namespace std;

int main()
{
   cout<<"hello word"<

2.操作步骤

(1)安装依赖的包

ubuntu@ubuntu:~/Documents/project/autotest$ sudo apt-get install automake^C

automake包括:aclocal、automake等
autoconf包括:autoscan、autoconf等

(2)autoscan

(3)aclocal

将生成的configure.scan修改为configure.ac或configure.in,先修改configure.ac里面的内容,再进行aclocal的执行;

ubuntu@ubuntu:~/Documents/project/autotest$ vim configure.ac 

这里尤其要注意下面红色的代码,需要填对

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([hello], [1.0], [[email protected]])
AM_INIT_AUTOMAKE(hello,1.0)

AC_CONFIG_SRCDIR([hello.cpp])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT(Makefile)

 

linux使用---automake学习(从原理到实践,一步步完成automake)_第2张图片

下面就是执行aclocal

ubuntu@ubuntu:~/Documents/project/autotest$ aclocal

下面详细介绍 configure.ac 文件的参数的意义

linux使用---automake学习(从原理到实践,一步步完成automake)_第3张图片

(3)autoconf

 此时可以看到已经生成了configure

(4)autoheader

autoheader生成了configure.h.in如果在configure.ac中定义了AC_CONFIG_HEADER,那么此文件就需要;

(5)Makefile.am

这里主要是修改Makefile.am文件

ubuntu@ubuntu:~/Documents/project/autotest$ vim Makefile.am
ubuntu@ubuntu:~/Documents/project/autotest$ cat Makefile.am 
AUTOMAKE_OPTIONS=foreign 
bin_PROGRAMS=hello 
hello_SOURCES=hello.cpp 

linux使用---automake学习(从原理到实践,一步步完成automake)_第4张图片

(6)automake

如果linux第一次使用automake这里容易出问题,如下出现了下面的问题:

configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'

 

其实这个通过这个命令automake --add-missing已经安装了,但是把错误打印了,给我们的感觉是还是有错误,此时只需要在执行一遍该命令即可。

linux使用---automake学习(从原理到实践,一步步完成automake)_第5张图片

此步主要是为了生成Makefile.in,加上--add-missing参数后,会补全缺少的脚本;

(7)测试

ubuntu@ubuntu:~/Documents/project/autotest$  ./configure
ubuntu@ubuntu:~/Documents/project/autotest$  make
ubuntu@ubuntu:~/Documents/project/autotest$  ./hello

和平时安装许多开源软件一样操作

linux使用---automake学习(从原理到实践,一步步完成automake)_第6张图片

 (7)打包

ubuntu@ubuntu:~/Documents/project/autotest$ make dist

执行后会发现一个安装包,这时候发给别人,解压编译即可运行了。

你可能感兴趣的:(linux)