轉載說明: html
雖然沒有開發過C語言的大型項目,但一直對C語言的項目組織比較感興趣。固然不是Visual Sutdio,CodeBlock 這類IDE的項目組織,而是GNU 系列開源工具。 若是在用過Linux系統就知道安裝開源軟件的這三個命令: linux
./configure (./config) git
make 網絡
make install(./make uninstall) 工具
這類軟件大多數開源軟件都是採用GNU 構建體系,具體表如今autotools 系列工具。轉載的這篇博文就是autools 系列軟件的使用流程。
網站
注1:安裝軟件時建議採用apt-get install gcc make autoconf automake libtool libsysfs-dev 命令安裝。適用於 debian 或基於 debian的系統。採用原文的 源碼安裝,會出現下面的錯誤 ui
configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL this
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1 spa
注2:能夠結合@中山野鬼 關於make 文檔編寫的博文閱讀 .net
注3:這裏有一副圖說明了 autotools 系列各個工具的使用關係,來源於網絡,具體出處已經記不起了
轉載正文:
GNU autotools安裝
一、下載軟件包,在linux嵌入式開發過程當中有不少的工具其實都在GNU的官方網站能夠下載到 http://www.gnu.org/software/software.html
二、要安裝autotools須要以下幾個文件
automake
autoconf
M4
安裝順序是M4 -> autoconf -> automake (很重要!!!!)
安裝須要的命令:
tar zxvf **
./configure
make
make install
我下載的版本是;
autoconf-2.63.tar.gz
automake-1.9.1.tar.gz
m4-1.4.11.tar.gz
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.ac/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、include兩個子目錄。在lib目錄中有一個print.c文件,在include目錄中有一個print.h文件。
(1)爲該工程編寫automake的輸入配置腳本Makefile.am。
(2)使用Gnu Autotools工具爲該工程建立Makefile文件,並編譯該工程。
這裏咱們總共有三個目錄,但只要在 test目錄 和 test/lib目錄下分別建立Makefile.am文件,test/include不須要建立Makefile.am文件。文件內容以下:
(1)hello.c
include "include/print.h"
int main(void)
{
print("Hello, Aillo\n");
return 0;
}
(2)print.h
void print ( char *s );
(3)print.c
#include "../include/print.h"
#include<stdio.h>
void print(char *string)
{
printf("%s",string);
}
(4)test目錄下的Makefile.am的內容:
SUBDIRS = lib
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.chello_LDADD = ./lib/libprint.a
(5)lib目錄下的Makefile.am的內容:
noinst_LIBRARIES = libprint.a
libprint_a_SOURCES = print.c ../include/print.h
開始使用aututools:步驟以下:
(1)輸入並執行"autoscan"命令,生成configure.scan文件,修改configure.scan文件的內容以下(圖中選中的位置爲須要添加或修改的地方),改完以後將文件重命名爲configure.ac
(若是圖片看不見,須要修改和添加的地方是:
AC_INIT(hello,0.01)
AM_INIT_AUTOMAKE
AC_PROG_RANLIB
)
(2)輸入並執行"aclocal"命令
(3)輸入並執行"autoconf"命令
(4)輸入並執行"autoheader"命令
(5)輸入並執行"automake --add-missing"命令,該步驟若是出現
"Makefile.am:require file ./NEWS" not found"
"Makefile.am:require file "./README not found"
則運行 touch NEWS README * * ( * * 表明你所缺失的文件,個數、名稱因我的狀況而定)
(6)輸入並執行"./configure"命令,便可生成Makefile文件
(7)輸入並執行"make -f Makefile "命令,編譯文件,生成 hello 文件
(8)" ./hello "執行hello文件,運行結果以下:
(若是圖片看不見,結果是:Hello, Aillo)