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