原文出自:https://www.cnblogs.com/chenshikun/p/6094089.html
updated by yulijun
第一步:常用工具安装:
正所谓:“工欲善其事,必先利其器”。我们常用的工具主要有
GNU Automake
GNU Autoconf
GNU m4
GNU Libtool
1、查看自己系统中是否安装有这些工具
终端输入命令:which autoconf
2、如果没有装则安装
终端输入命令:sudo apt-get install autoconf
第二步:自动生成makefile的步骤
该步骤是一成不变的,需要改变的只是文件里的内容
1、运行autoscan命令
扫描源代码以搜寻普通的可移植性问题,比如检查编译器、库、头文件等,生成文件configure.scan,它是configure.ac的一个雏形。
这一步可能会产生如下错误:
Unescaped left brace in regexis deprecated, passed through in regex; marked by <-- HERE in m/\${ <--HERE [^\}]*}/ at /usr/bin/autoscan line 361.
原因是最新的perl不支持{作为正则表达式。
需要执行如下命令修改:
Sudo vim /usr/bin/autoscan 强制修改361行,去掉左大括号{
保存时执行:wq!
2、将configure.scan文件重命名为configure.ac。
按照需要修改configure.ac文件configure.ac文件的内容是一些宏,confiugre.ac调用一系列autoconf宏来测试程序需要的 或用到的特性是否存在,以及这些特性的功能。这些宏经过autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.ac文件中的宏的顺序并没有规定,但是你必须在文件的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。
3、执行aclocal命令
aclocal是一个perl 脚本程序。aclocal根据configure.ac文件的内容,自动生成aclocal.m4文件。
4、执行autoheader命令
该命令生成config.h.in文件。该命令通常会从acconfig.h文件中复制用户附加的符号定义。
5、执行autoconf命令
有了configure.ac和aclocal.m4 两个文件以后,我们就可以使用autoconf来产生configure文件了。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。
6、在Project目录下新建Makefile.am文件
7、运行automake --add-missing命令
automake会根据Makefile.am文件产生一些文件,其中最重要的是Makefile.in文件。
8、执行configure生成Makefile。
第三步:操作示例:Hellocsk.cpp
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello csk"<<endl;
return 0;
}
1、运行autoscan命令,生成文件列表如下
-rw-rw-r-- 1 csk csk 0 Nov 23 15:14 autoscan.log
-rw-rw-r-- 1 csk csk 473 Nov23 15:14 configure.scan
-rw-rw-r-- 1 csk csk 100 Nov23 15:13 Hellocsk.cpp
2、重命名configure.scan文件为configure.ac,修改configure.ac文件为如下样子
# -*- Autoconf -*-
#Process thisfile with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT(Hellocsk,1.0, 287288452@qq.com)
AC_CONFIG_SRCDIR([Hellocsk.cpp])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(Hellocsk,1.0) #这一行最新的automake应该修改为:AM_INIT_AUTOMAKE
#Checks forprograms.
AC_PROG_CXX
#Checks forlibraries.
#Checks forheader files.
#Checks for typedefs,structures, and compiler characteristics.
#Checks forlibrary functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
3、执行aclocal命令,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670Nov 23 15:19 aclocal.m4
drwxr-xr-x2 csk csk 4096 Nov2315:19 autom4te.cache
-rw-rw-r-- 1 csk csk 0 Nov2315:14 autoscan.log
-rw-rw-r-- 1 csk csk 512 Nov 23 15:18 configure.ac
-rw-rw-r-- 1 csk csk 100 Nov 23 15:13Hellocsk.cpp
4、执行autoheader命令,生成config.h.in文件,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670Nov 23 15:19 aclocal.m4
drwxr-xr-x2 csk csk 4096 Nov2315:20 autom4te.cache
-rw-rw-r-- 1 csk csk 0 Nov2315:14 autoscan.log
-rw-rw-r-- 1 csk csk 625 Nov 23 15:20 config.h.in
-rw-rw-r-- 1 csk csk 512 Nov 23 15:18 configure.ac
-rw-rw-r-- 1 csk csk 100 Nov 23 15:13Hellocsk.cpp
5、执行autoconf命令,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4
drwxr-xr-x2 csk csk 4096 Nov2315:20 autom4te.cache
-rw-rw-r-- 1 csk csk 0 Nov2315:14 autoscan.log
-rw-rw-r-- 1 csk csk 625 Nov 23 15:20 config.h.in
-rwxrwxr-x 1 csk csk 135926Nov 23 15:21 configure
-rw-rw-r-- 1 csk csk 512 Nov 23 15:18 configure.ac
-rw-rw-r-- 1 csk csk 100 Nov 23 15:13Hellocsk.cpp
6、在Project目录下新建Makefile.am文件,Makefile.am文件的内容如下:
AUTOMARK_OPTIONS=foreign
noinst_PROGRAMS=Hellocsk
HelloWorld_SOURCES=Hellocsk.cpp
7、运行automake --add-missing命令,就会得到Makefile.in文件。生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670 Nov 23 15:35 aclocal.m4
-rw-rw-r-- 1 csk csk 0 Nov2315:38 AUTHORS
drwxr-xr-x2 csk csk 4096 Nov2315:36 autom4te.cache
-rw-rw-r-- 1 csk csk 0 Nov2315:30 autoscan.log
-rw-rw-r-- 1 csk csk 0 Nov2315:38 ChangeLog
-rw-rw-r-- 1 csk csk 625 Nov 23 15:34 config.h.in
-rwxrwxr-x 1 csk csk 135926Nov 23 15:35 configure
-rw-rw-r-- 1 csk csk 512 Nov 23 15:35 configure.ac
lrwxrwxrwx1 csk csk 32 Nov 23 15:37 COPYING-> /usr/share/automake-1.14/COPYING
lrwxrwxrwx1 csk csk 32 Nov 23 15:37 depcomp-> /usr/share/automake-1.14/depcomp
-rw-rw-r-- 1 csk csk 100 Nov 23 15:30 Hellocsk.cpp
lrwxrwxrwx1 csk csk 32 Nov 23 15:37 INSTALL-> /usr/share/automake-1.14/INSTALL
lrwxrwxrwx1 csk csk 35 Nov 23 15:37 install-sh-> /usr/share/automake-1.14/install-sh
-rw-rw-r-- 1 csk csk 80 Nov2315:37 Makefile.am
-rw-rw-r-- 1 csk csk 22023 Nov 23 15:38 Makefile.in
lrwxrwxrwx1 csk csk 32 Nov 23 15:37 missing-> /usr/share/automake-1.14/missing
-rw-rw-r-- 1 csk csk 0 Nov2315:38 NEWS
-rw-rw-r-- 1 csk csk 0 Nov2315:38README
如果运行automake--add-missing后出现如下提示
Makefile.am:error: required file './NEWS' not found
Makefile.am:error: required file './README' not found
Makefile.am:error: required file './AUTHORS' not found
Makefile.am:error: required file './ChangeLog' notfound
则运行
touch NEWSREADME ChangeLog AUTHORS
8、执行./configure生成Makefile
9、执行make 生成Hellocsk可执行文件
10、执行Hellocsk
csk@ubuntu:~/work/cyg/work$./Hellocsk
Hellocsk
csk@ubuntu:~/work/cyg/work$