1. 程式人生 > >automake:autotools 工具集使用速成 automake:autotools 工具集使用速成

automake:autotools 工具集使用速成 automake:autotools 工具集使用速成

automake:autotools 工具集使用速成

一般而言,對於小專案或玩具程式,手動編寫 Makefile 即可。但對於大型專案,手動編寫維護 Makefile 成為一件費時費力的無聊工作。

本文介紹 autotools 工具集自動生成符合 Linux 規範的 Makefile 檔案。

如果讀者沒有安裝 autotools 工具集,ubuntu預設自帶了,如果沒有,安裝命令如下,

$ sudo apt-get install automake

安裝完成之後,會有如下工具可用,

     aclocal
     autoscan
     autoconf
     autoheader
     automake

一般大型專案,程式碼組織結構分為兩種,一種是所有檔案都在同一個目錄下的 flat 結構,另一種是按層次組織的多資料夾形式。

先來看第一種:

flat 結構的專案使用 autotools 工具集

本篇測試程式碼如下,

入口程式碼  int_arithmetic.c

複製程式碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "sum.h" #include "sub.h" #include "mul.h" #include "div.h" int main() { printf("======== < Integer Arithmethic > ========\n"); int x, y; printf("Enter two integer: "); scanf("%d%d", &x, &y); int sm = sum(x, y); printf("sum is: %d\n", sm); int sb = sub(x, y); printf("sub is: %d\n", sb); int ml = mul(x, y); printf("mul is: %d\n", ml); int dv = divide(x, y); printf("div is: %d\n", dv); return 0; }
複製程式碼

 

輔助程式碼,標頭檔案,

sum.h

#ifndef SUM_H_
#define SUM_H_

int sum(int x, int y); #endif

sub.h

#ifndef SUB_H_
#define SUB_H_

int sub(int x, int y); #endif

mul.h

#ifndef MUL_H_
#define MUL_H_

int mul(int x, int y); #endif

div.h

#ifndef DIV_H_
#define DIV_H_

int divide(int x, int y); #endif

 

輔助程式碼,實現檔案,

sum.c

#include "sum.h"

int sum(int x, int y) { return x + y; }

sub.c

#include "sub.h"

int sub(int x, int y) { return x - y; }

mul.c

#include "mul.h"

int mul(int x, int y) { return x * y; }

div.c

複製程式碼
#include "div.h"
#include <stdio.h>

int divide(int x, int y) { if(x % y != 0) printf("\nWarning: Integer Division May Have Accuracy Loss.\n"); return x / y; }
複製程式碼

 

1) 在專案目錄下,執行 autoscan 命令,生成 configure.scan 檔案,內容如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_OUTPUT
複製程式碼

重新命名 configure.scan 為 configure.ac ,並修改其內容為,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(int_arithmetic, 0.1, [email protected])
AM_INIT_AUTOMAKE(int_arithmetic, 0.1)
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
複製程式碼

上述 configure.ac 中巨集定義意義如下,

AC_PREREQ         : 宣告 autoconf 的版本號
AC_INIT : 宣告軟體名稱,版本號及 bug report 地址
AM_INIT_AUTOMAKE : automake 需要的資訊,引數為軟體名和版本號
AC_CONFIG_SRCDIR : autoscan 偵測的原始檔名,用來確定目錄的有效性
AC_CONFIG_HEADERS : autoscan 定義要生成的標頭檔案,後續 autoheader 要使用
AC_PROG_CC : 指定編譯器,預設為 gcc
AC_CHECK_HEADERS : autoscan 偵測到的標頭檔案
AC_CONFIG_FILES : 指定生成 Makefile,如果是多目錄結構,可指定生成多個Makefile,以空格分隔,例如,AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT : autoscan 輸出

2) 執行 aclocal,根據 configure.ac 生成 aclocal.m4 檔案,該檔案主要處理各種巨集定義

3) 執行 autoconf,將 configure.ac 中的巨集展開,生成 configure 指令碼,這過程中可能會用到 aclocal.m4

4) 執行 autoheader,生成 config.h.in 檔案,該命令通常會從 "acconfig.h” 檔案中複製使用者附加的符號定義。該例子中沒有附加的符號定義, 所以不需要建立 "acconfig.h” 檔案

5) 建立 Makefile.am 檔案,automake工具會根據 configure.in 中的參量把 Makefile.am 轉換成 Makefile.in 檔案,最終通過 Makefile.in 生成 Makefile

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=int_arithmetic
int_arithmetic_SOURCES=int_arithmetic.c sum.c sub.c mul.c div.c
include_HEADERS=sum.h sub.h mul.h div.h

對上述 makefile.am 中各標籤的解釋,

AUTOMAKE_OPTIONS       : 由於 GNU 對自己釋出的軟體有嚴格的規範, 比如必須附帶許可證宣告檔案 COPYING 等,否則 automake 執行時會報錯。 
                automake 提供了3中軟體等級: foreign, gnu, gnits, 預設級別是gnu, 在本例中,使用 foreign 等級,它只檢測必須的檔案。
bin_PROGRAMS : 要生成的可執行檔名稱,如果要生成多個可執行檔案,用空格隔開。
int_arithmetic_SOURCES : 可執行檔案依賴的所有原始檔。

6) 手動新增必要的檔案 NEWS,README,AUTHORS,ChangeLog

7) 執行 automake --add-missing ,該命令生成 Makefile.in 檔案。使用選項 "--add-missing" 可以讓 automake 自動新增一些必需的指令碼檔案。

8) 執行 ./configure 生成 Makefile

====>>> 至此 Makefile 生成完畢。

如果要繼續安裝,

9) $ make

10) $ sudo make install  即可將可執行檔案安裝在 /usr/local/bin/ 目錄下,以後就可以直接使用啦

11)  $ sudo make uninstall 即可將安裝的可執行檔案從 /usr/local/bin 目錄下移除

如果要釋出你的軟體,

12) $ make dist  即可打包生成 xxx-version.tar.gz 檔案

如果要清理中間檔案,

13) make clean

14) make distclean

 

層次結構的專案使用 autotools 工具集

 當前專案層次結構如下圖,

主入口函式 int_arithmetic.c

複製程式碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "include/sum.h" #include "include/sub.h" #include "include/mul.h" #include "include/div.h" int main() { printf("======== < Integer Arithmethic > ========\n"); int x, y; printf("Enter two integer: "); scanf("%d%d", &x, &y); int sm = sum(x, y); printf("sum is: %d\n", sm); int sb = sub(x, y); printf("sub is: %d\n", sb); int ml = mul(x, y); printf("mul is: %d\n", ml); int dv = divide(x, y); printf("div is: %d\n", dv); return 0; }
複製程式碼

標頭檔案,

sum.h

#ifndef SUM_H_
#define SUM_H_

int sum(int x, int y); #endif

sub.h

#ifndef SUB_H_
#define SUB_H_

int sub(int x, int y); #endif

mul.h

#ifndef MUL_H_
#define MUL_H_

int mul(int x, int y); #endif

div.h

#ifndef DIV_H_
#define DIV_H_

int divide(int x, int y); #endif

 實現檔案,

sum.c

#include "../include/sum.h"

int sum(int x, int y) { return x + y; }

sub.c

#include "../include/sub.h"

int sub(int x, int y) { return x - y; }

mul.c

#include "../include/mul.h"

int mul(int x, int y) { return x * y; }

div.c

複製程式碼
#include "../include/div.h"
#include <stdio.h>

int divide(int x, int y) { if(x % y != 0) printf("\nWarning: Integer Division May Have Accuracy Loss.\n"); return x / y; }
複製程式碼

1) 在專案頂層目錄,建立檔案 Makefile.am, 內容如下,

AUTOMAKE_OPTIONS=foreign     		   # 軟體等級  
SUBDIRS=src  				   # 先掃描子目錄  
bin_PROGRAMS=int_arithmetic    		   # 軟體生成後的可執行檔名稱  
int_arithmetic_SOURCES=int_arithmetic.c    # 當前目錄原始檔  
int_arithmetic_LDADD=src/libsrc.a          # 靜態連線方式,連線 src 下生成的 libsrc.a 檔案  
#LIBS = -l xxx -l xxx                      # 新增必要的庫  

在 src 目錄,建立檔案 Makefile.am,內容如下,

noinst_LIBRARIES=libsrc.a                  # 生成的靜態庫檔名稱,noinst加上之後是隻編譯,不安裝到系統中  
libsrc_a_SOURCES=sum.c sub.c mul.c div.c   # 這個靜態庫檔案需要用到的依賴  
include_HEADERS=../include/sum.h ../include/sub.h ../include/mul.h ../include/div.h  # 匯入需要依賴的標頭檔案 

2) 執行 autoscan 生成 configure.scan 檔案, 如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT
複製程式碼

 重新命名 configure.scan 為 configure.ac 並修改如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])

#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(int_arithmetic, 0.1, [email protected])
AM_INIT_AUTOMAKE(int_arithmetic, 0.1)
# Generate static lib
AC_PROG_RANLIB

AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT
複製程式碼

 

3) 執行 aclocal

4) 執行 autoconf

5) 執行 autoheader

6) 手動新增必要的檔案 NEWS,README,AUTHORS,ChangeLog

7) 執行 automake --add-missing

8) 執行 ./configure 生存 Makefile

====>>> 至此 Makefile 生成完畢。

 

如果要繼續安裝,

9) $ make

10) $ sudo make install  即可將可執行檔案安裝在 /usr/local/bin/ 目錄下,以後就可以直接使用啦

11)  $ sudo make uninstall 即可將安裝的可執行檔案從 /usr/local/bin 目錄下移除

如果要釋出你的軟體,

12) $ make dist  即可打包生成 xxx-version.tar.gz 檔案

如果要清理中間檔案,

13) make clean

14) make distclean

 

最後做一個autotools使用的流程總結:


1. 執行autoscan命令。這個命令主要用於掃描工作目錄,並且生成configure.scan檔案。

2. 修改configure.scan為configure.ac檔案,並且修改配置內容。

3. 執行aclocal命令。掃描 configure.ac 檔案生成 aclocal.m4檔案。

4. 執行autoconf命令,這個命令將 configure.ac 檔案中的巨集展開,生成 configure 指令碼。

5. 執行autoheader命令,該命令生成 config.h.in 檔案。

6. 編寫Makefile.am檔案。

7. 執行automake --add-missing命令,該命令生成 Makefile.in 檔案。

8. 執行 ./congigure命令,將Makefile.in命令生成Makefile檔案。

9. 執行make命令,生成可執行檔案。

 


如果需要更更多細節,請參考原創部落格:

  http://blog.csdn.net/initphp/article/details/43705765

 

一般而言,對於小專案或玩具程式,手動編寫 Makefile 即可。但對於大型專案,手動編寫維護 Makefile 成為一件費時費力的無聊工作。

本文介紹 autotools 工具集自動生成符合 Linux 規範的 Makefile 檔案。

如果讀者沒有安裝 autotools 工具集,ubuntu預設自帶了,如果沒有,安裝命令如下,

$ sudo apt-get install automake

安裝完成之後,會有如下工具可用,

     aclocal
     autoscan
     autoconf
     autoheader
     automake

一般大型專案,程式碼組織結構分為兩種,一種是所有檔案都在同一個目錄下的 flat 結構,另一種是按層次組織的多資料夾形式。

先來看第一種:

flat 結構的專案使用 autotools 工具集

本篇測試程式碼如下,

入口程式碼  int_arithmetic.c

複製程式碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "sum.h" #include "sub.h" #include "mul.h" #include "div.h" int main() { printf("======== < Integer Arithmethic > ========\n"); int x, y; printf("Enter two integer: "); scanf("%d%d", &x, &y); int sm = sum(x, y); printf("sum is: %d\n", sm); int sb = sub(x, y); printf("sub is: %d\n", sb); int ml = mul(x, y); printf("mul is: %d\n", ml); int dv = divide(x, y); printf("div is: %d\n", dv); return 0; }
複製程式碼

 

輔助程式碼,標頭檔案,

sum.h

#ifndef SUM_H_
#define SUM_H_

int sum(int x, int y); #endif

sub.h

#ifndef SUB_H_
#define SUB_H_

int sub(int x, int y); #endif

mul.h

#ifndef MUL_H_
#define MUL_H_

int mul(int x, int y); #endif

div.h

#ifndef DIV_H_
#define DIV_H_

int divide(int x, int y); #endif

 

輔助程式碼,實現檔案,

sum.c

#include "sum.h"

int sum(int x, int y) { return x + y; }

sub.c

#include "sub.h"

int sub(int x, int y) { return x - y; }

mul.c

#include "mul.h"

int mul(int x, int y) { return x * y; }

div.c

複製程式碼
#include "div.h"
#include <stdio.h>

int divide(int x, int y) { if(x % y != 0) printf("\nWarning: Integer Division May Have Accuracy Loss.\n"); return x / y; }
複製程式碼

 

1) 在專案目錄下,執行 autoscan 命令,生成 configure.scan 檔案,內容如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_OUTPUT
複製程式碼

重新命名 configure.scan 為 configure.ac ,並修改其內容為,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(int_arithmetic, 0.1, [email protected])
AM_INIT_AUTOMAKE(int_arithmetic, 0.1)
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
複製程式碼

上述 configure.ac 中巨集定義意義如下,

AC_PREREQ         : 宣告 autoconf 的版本號
AC_INIT : 宣告軟體名稱,版本號及 bug report 地址
AM_INIT_AUTOMAKE : automake 需要的資訊,引數為軟體名和版本號
AC_CONFIG_SRCDIR : autoscan 偵測的原始檔名,用來確定目錄的有效性
AC_CONFIG_HEADERS : autoscan 定義要生成的標頭檔案,後續 autoheader 要使用
AC_PROG_CC : 指定編譯器,預設為 gcc
AC_CHECK_HEADERS : autoscan 偵測到的標頭檔案
AC_CONFIG_FILES : 指定生成 Makefile,如果是多目錄結構,可指定生成多個Makefile,以空格分隔,例如,AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT : autoscan 輸出

2) 執行 aclocal,根據 configure.ac 生成 aclocal.m4 檔案,該檔案主要處理各種巨集定義

3) 執行 autoconf,將 configure.ac 中的巨集展開,生成 configure 指令碼,這過程中可能會用到 aclocal.m4

4) 執行 autoheader,生成 config.h.in 檔案,該命令通常會從 "acconfig.h” 檔案中複製使用者附加的符號定義。該例子中沒有附加的符號定義, 所以不需要建立 "acconfig.h” 檔案

5) 建立 Makefile.am 檔案,automake工具會根據 configure.in 中的參量把 Makefile.am 轉換成 Makefile.in 檔案,最終通過 Makefile.in 生成 Makefile

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=int_arithmetic
int_arithmetic_SOURCES=int_arithmetic.c sum.c sub.c mul.c div.c
include_HEADERS=sum.h sub.h mul.h div.h

對上述 makefile.am 中各標籤的解釋,

AUTOMAKE_OPTIONS       : 由於 GNU 對自己釋出的軟體有嚴格的規範, 比如必須附帶許可證宣告檔案 COPYING 等,否則 automake 執行時會報錯。 
                automake 提供了3中軟體等級: foreign, gnu, gnits, 預設級別是gnu, 在本例中,使用 foreign 等級,它只檢測必須的檔案。
bin_PROGRAMS : 要生成的可執行檔名稱,如果要生成多個可執行檔案,用空格隔開。
int_arithmetic_SOURCES : 可執行檔案依賴的所有原始檔。

6) 手動新增必要的檔案 NEWS,README,AUTHORS,ChangeLog

7) 執行 automake --add-missing ,該命令生成 Makefile.in 檔案。使用選項 "--add-missing" 可以讓 automake 自動新增一些必需的指令碼檔案。

8) 執行 ./configure 生成 Makefile

====>>> 至此 Makefile 生成完畢。

如果要繼續安裝,

9) $ make

10) $ sudo make install  即可將可執行檔案安裝在 /usr/local/bin/ 目錄下,以後就可以直接使用啦

11)  $ sudo make uninstall 即可將安裝的可執行檔案從 /usr/local/bin 目錄下移除

如果要釋出你的軟體,

12) $ make dist  即可打包生成 xxx-version.tar.gz 檔案

如果要清理中間檔案,

13) make clean

14) make distclean

 

層次結構的專案使用 autotools 工具集

 當前專案層次結構如下圖,

主入口函式 int_arithmetic.c

複製程式碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "include/sum.h" #include "include/sub.h" #include "include/mul.h" #include "include/div.h" int main() { printf("======== < Integer Arithmethic > ========\n"); int x, y; printf("Enter two integer: "); scanf("%d%d", &x, &y); int sm = sum(x, y); printf("sum is: %d\n", sm); int sb = sub(x, y); printf("sub is: %d\n", sb); int ml = mul(x, y); printf("mul is: %d\n", ml); int dv = divide(x, y); printf("div is: %d\n", dv); return 0; }
複製程式碼

標頭檔案,

sum.h

#ifndef SUM_H_
#define SUM_H_

int sum(int x, int y); #endif

sub.h

#ifndef SUB_H_
#define SUB_H_

int sub(int x, int y); #endif

mul.h

#ifndef MUL_H_
#define MUL_H_

int mul(int x, int y); #endif

div.h

#ifndef DIV_H_
#define DIV_H_

int divide(int x, int y); #endif

 實現檔案,

sum.c

#include "../include/sum.h"

int sum(int x, int y) { return x + y; }

sub.c

#include "../include/sub.h"

int sub(int x, int y) { return x - y; }

mul.c

#include "../include/mul.h"

int mul(int x, int y) { return x * y; }

div.c

複製程式碼
#include "../include/div.h"
#include <stdio.h>

int divide(int x, int y) { if(x % y != 0) printf("\nWarning: Integer Division May Have Accuracy Loss.\n"); return x / y; }
複製程式碼

1) 在專案頂層目錄,建立檔案 Makefile.am, 內容如下,

AUTOMAKE_OPTIONS=foreign     		   # 軟體等級  
SUBDIRS=src  				   # 先掃描子目錄  
bin_PROGRAMS=int_arithmetic    		   # 軟體生成後的可執行檔名稱  
int_arithmetic_SOURCES=int_arithmetic.c    # 當前目錄原始檔  
int_arithmetic_LDADD=src/libsrc.a          # 靜態連線方式,連線 src 下生成的 libsrc.a 檔案  
#LIBS = -l xxx -l xxx                      # 新增必要的庫  

在 src 目錄,建立檔案 Makefile.am,內容如下,

noinst_LIBRARIES=libsrc.a                  # 生成的靜態庫檔名稱,noinst加上之後是隻編譯,不安裝到系統中  
libsrc_a_SOURCES=sum.c sub.c mul.c div.c   # 這個靜態庫檔案需要用到的依賴  
include_HEADERS=../include/sum.h ../include/sub.h ../include/mul.h ../include/div.h  # 匯入需要依賴的標頭檔案 

2) 執行 autoscan 生成 configure.scan 檔案, 如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT
複製程式碼

 重新命名 configure.scan 為 configure.ac 並修改如下,

複製程式碼
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])

#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(int_arithmetic, 0.1, [email protected])
AM_INIT_AUTOMAKE(int_arithmetic, 0.1)
# Generate static lib
AC_PROG_RANLIB

AC_CONFIG_SRCDIR([int_arithmetic.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT
複製程式碼

 

3) 執行 aclocal

4) 執行 autoconf

5) 執行 autoheader

6) 手動新增必要的檔案 NEWS,README,AUTHORS,ChangeLog

7) 執行 automake --add-missing

8) 執行 ./configure 生存 Makefile

====>>> 至此 Makefile 生成完畢。

 

如果要繼續安裝,

9) $ make

10) $ sudo make install  即可將可執行檔案安裝在 /usr/local/bin/ 目錄下,以後就可以直接使用啦

11)  $ sudo make uninstall 即可將安裝的可執行檔案從 /usr/local/bin 目錄下移除

如果要釋出你的軟體,

12) $ make dist  即可打包生成 xxx-version.tar.gz 檔案

如果要清理中間檔案,

13) make clean

14) make distclean

 

最後做一個autotools使用的流程總結:


1. 執行autoscan命令。這個命令主要用於掃描工作目錄,並且生成configure.scan檔案。

2. 修改configure.scan為configure.ac檔案,並且修改配置內容。

3. 執行aclocal命令。掃描 configure.ac 檔案生成 aclocal.m4檔案。

4. 執行autoconf命令,這個命令將 configure.ac 檔案中的巨集展開,生成 configure 指令碼。

5. 執行autoheader命令,該命令生成 config.h.in 檔案。

6. 編寫Makefile.am檔案。

7. 執行automake --add-missing命令,該命令生成 Makefile.in 檔案。

8. 執行 ./congigure命令,將Makefile.in命令生成Makefile檔案。

9. 執行make命令,生成可執行檔案。

 


如果需要更更多細節,請參考原創部落格:

  http://blog.csdn.net/initphp/article/details/43705765