GNU Autotools簡單舉例

    Linux下,工程管理器 Make 可用於自動編譯、鏈接程序的實用工具。我們要做的是寫一個makefile 文件,然後用make命令來編譯、鏈接程序。Makefile的作用就是讓編譯器知道要編譯一個文件需要依賴其他的哪些文件。這裏我們就是要用GNU Autotools來收集系統配置信息並自動生成Makefile文件。


GNU Autotools指的就是下面的五個工具:

 (1)aclocal

 (2)autoscan

 (3)autoconf

 (4)autoheader

 (5)automake

Autotools的使用流程

第一步:手工編寫Makefile.am這個文件

第二步:在源代碼目錄樹的最高層運行autoscan。然後手動修改configure.scan文件,並改名爲configure.in。

第三步:運行aclocal,它會根據configure.ac的內容生成aclocal.m4文件。

第四步:運行autoconf,它根據configure.ac和aclocal.m4的內容生成configure這個配置腳本文件。

第五步:運行automake --add-missing,它根據Makefile.am的內容生成Makefile.in。

第六步:運行./configure,它會根據Makefile.in的內容生成Makefile這個文件。

    獲得Makefile文件後,我們就可以使用make程序來管理我們的工程了 

    首先有一個簡單的工程,其目錄和文件結構如下所述:工程的最高層目錄test中有一個hello.c文件和lib子目錄。在lib目錄中有一個print.h、print.c文件。


(1)hello.c

#include"lib/print.h"
#include<stdio.h>
int main(void)
{
    print();
}
(2)print.c
#include"print.h"
#include<stdio.h>
void print(void)
{
    printf("hello world!\n");
}
(3)print.h
#ifndef __PRINT_H
#define __PRINT_H

void print(void);

#endif

    然後爲該工程編寫automake的輸入配置腳本Makefile.am。

    test目錄下的Makefile.am的內容:

noinst_LIBRARIES = libprint.a
libprint_a_SOURCES =print.c print.h

lib目錄下的Makefile.am的內容:

SUBDIRS=lib
bin_PROGRAMS=hello
hello_SOURCES=hello.c
include_HEADERS=./lib/print.h
hello_LDADD=./lib/libprint.a

開始使用aututools:步驟如下:

(1)      輸入並執行"autoscan"命令,生成configure.scan文件,修改configure.scan文件的內容如下(圖中選中的位置爲需要添加或修改的地方),改完之後將文件重命名爲configure.in

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.57)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)             #在此行內容中設置當前軟件包信息 
AM_INIT_AUTOMAKE(hello,1.0)    #automake 所必備的宏,必須添加(所要產生軟件的名稱,版本編號)
AC_PROG_RANLIB                 #需要加入的內容,因爲使用了靜態庫
AC_CONFIG_SRCDIR([hello.c])    #源文件名
AC_CONFIG_HEADER([config.h])   #config 文件

# Checks for programs.
AC_PROG_CC                     #檢查系統可用的C 編譯器,若源代碼是用C 寫的就需要這個宏。

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 lib/Makefile])
AC_OUTPUT                      #輸出文件名爲 makefile

(2)輸入並執行"aclocal"命令

(3)輸入並執行"autoconf"命令

(4)輸入並執行"autoheader"命令

(5)輸入並執行"automake --add-missing"命令

(6)輸入並執行"./configure"命令,即可生成Makefile文件

(7)輸入並執行"make "命令,編譯文件,生成 hello 文件

(8)" ./hello "執行hello文件,運行結果如下:



內容整理索引來自:Aillo,發佈於2008.04.14


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章