正所謂:“工欲善其事,必先利其器”。我們常用的工具主要有
GNU Automake
GNU Autoconf
GNU m4
GNU Libtool
1、查看自己系統中是否安裝有這些工具
終端輸入命令:which autoconf
2、如果沒有裝則安裝
終端輸入命令:sudo apt-get install autoconf
第二步:自動生成makefile的步驟
該步驟是一成不變的,需要改變的只是文件里的內容
1、運行autoscan命令
掃描源代碼以搜尋普通的可移植性問題,比如檢查編譯器、庫、頭文件等,生成文件configure.scan,它是configure.ac的一個雛形。
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 Nov 23 15:14 configure.scan -rw-rw-r-- 1 csk csk 100 Nov 23 15:13 Hellocsk.cpp
2、重命名configure.scan文件為configure.ac,修改configure.ac文件為如下樣子
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT(Hellocsk, 1.0, Chen_shikun@163.com) AC_CONFIG_SRCDIR([Hellocsk.cpp]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(Hellocsk,1.0) # 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_CONFIG_FILES([Makefile]) AC_OUTPUT
3、執行aclocal命令,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4 drwxr-xr-x 2 csk csk 4096 Nov 23 15:19 autom4te.cache -rw-rw-r-- 1 csk csk 0 Nov 23 15: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:13 Hellocsk.cpp
4、執行autoheader命令,生成config.h.in文件,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4 drwxr-xr-x 2 csk csk 4096 Nov 23 15:20 autom4te.cache -rw-rw-r-- 1 csk csk 0 Nov 23 15: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:13 Hellocsk.cpp
5、執行autoconf命令,生成的文件列表如下:
-rw-rw-r-- 1 csk csk 39670 Nov 23 15:19 aclocal.m4 drwxr-xr-x 2 csk csk 4096 Nov 23 15:20 autom4te.cache -rw-rw-r-- 1 csk csk 0 Nov 23 15:14 autoscan.log -rw-rw-r-- 1 csk csk 625 Nov 23 15:20 config.h.in -rwxrwxr-x 1 csk csk 135926 Nov 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:13 Hellocsk.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 Nov 23 15:38 AUTHORS drwxr-xr-x 2 csk csk 4096 Nov 23 15:36 autom4te.cache -rw-rw-r-- 1 csk csk 0 Nov 23 15:30 autoscan.log -rw-rw-r-- 1 csk csk 0 Nov 23 15:38 ChangeLog -rw-rw-r-- 1 csk csk 625 Nov 23 15:34 config.h.in -rwxrwxr-x 1 csk csk 135926 Nov 23 15:35 configure -rw-rw-r-- 1 csk csk 512 Nov 23 15:35 configure.ac lrwxrwxrwx 1 csk csk 32 Nov 23 15:37 COPYING -> /usr/share/automake-1.14/COPYING lrwxrwxrwx 1 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 lrwxrwxrwx 1 csk csk 32 Nov 23 15:37 INSTALL -> /usr/share/automake-1.14/INSTALL lrwxrwxrwx 1 csk csk 35 Nov 23 15:37 install-sh -> /usr/share/automake-1.14/install-sh -rw-rw-r-- 1 csk csk 80 Nov 23 15:37 Makefile.am -rw-rw-r-- 1 csk csk 22023 Nov 23 15:38 Makefile.in lrwxrwxrwx 1 csk csk 32 Nov 23 15:37 missing -> /usr/share/automake-1.14/missing -rw-rw-r-- 1 csk csk 0 Nov 23 15:38 NEWS -rw-rw-r-- 1 csk csk 0 Nov 23 15:38 README
如果運行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' not found
則運行
touch NEWS README ChangeLog AUTHORS
8、執行configure生成Makefile
9、執行make 生成Hellocsk可執行文件
10、執行Hellocsk
csk@ubuntu:~/work/cyg/work$ ./Hellocsk
Hello csk
csk@ubuntu:~/work/cyg/work$