青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0
為了編譯一個簡單的源文件main.c,需要自動生成一個makefile,以下是步驟:

第一步:
----------
在/root/project/main目錄下創建一個文件main.c,其內容如下:
------------------------------------------------
#include <stdio.h>
int main(int argc, char** argv)
{
    printf("Hello, Auto Makefile!\n");
    return 0;
}
------------------------------------------------

此時狀態如下:
[root@localhost main]# pwd
/root/project/main
[root@localhost main]# ls
main.c
[root@localhost main]#

第二步:
----------
運行 autoscan , 自動創建兩個文件: autoscan.log configure.scan

此時狀態如下:
[root@localhost main]# autoscan
[root@localhost main]# ls
autoscan.log configure.scan main.c
[root@localhost main]#

第三步:
----------
修改configure.scan的文件名為configure.in

查看configure.in的內容:
------------------------------------------------
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT
------------------------------------------------

解讀以上的文件:

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

# AC_PREREQ:
# 確保使用的是足夠新的Autoconf版本。如果用于創建configure的Autoconf的版
# 本比version 要早,就在標準錯誤輸出打印一條錯誤消息并不會創建configure。
AC_PREREQ(2.61)

#
# 初始化,定義軟件的基本信息,包括設置包的全稱,版本號以及報告BUG時需要用的郵箱地址
#
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

#
# 用來偵測所指定的源碼文件是否存在,來確定源碼目錄的有效性
#
AC_CONFIG_SRCDIR([main.c])

#
# 用于生成config.h文件,以便autoheader使用
#
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

#
# 創建輸出文件。在`configure.in'的末尾調用本宏一次。
#
AC_OUTPUT
------------------------------------------------

修改動作:
    1.修改AC_INIT里面的參數: AC_INIT(main,1.0, pgpxc@163.com)
    2.添加宏AM_INIT_AUTOMAKE, 它是automake所必備的宏,也同前面一樣,PACKAGE是所要產生軟件套件的名稱,VERSION是版本編號。
    3.在AC_OUTPUT后添加輸出文件Makefile


修改后的結果:
------------------------------------------------
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)
AC_INIT(main, 1.0, pgpxc@163.com)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE(main,1.0)

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT([Makefile])
------------------------------------------------

第四步:
運行 aclocal, 生成一個“aclocal.m4”文件和一個緩沖文件夾autom4te.cache,該文件主要處理本地的宏定義。

此時的狀態是:
[root@localhost main]# aclocal
[root@localhost main]# ls
aclocal.m4 autom4te.cache autoscan.log configure.in configure.in~ main.c
[root@localhost main]#


第五步:
運行 autoconf, 目的是生成 configure

此時的狀態是:
[root@localhost main]# autoconf
[root@localhost main]# ls
aclocal.m4      autoscan.log configure.in   main.c
autom4te.cache configure     configure.in~
[root@localhost main]#

第六步:
運行 autoheader,它負責生成config.h.in文件。該工具通常會從“acconfig.h”文件中復制用戶附加的符號定義,因此此處沒有附加符號定義,所以不需要創建“acconfig.h”文件。

此時的狀態是:
[root@localhost main]# autoheader
[root@localhost main]# ls
aclocal.m4      autoscan.log configure     configure.in~
autom4te.cache config.h.in   configure.in main.c
[root@localhost main]#

第七步:
下面即將運行 automake, 但在此之前應該做一下準備工作!

首先
創建一個 Makefile.am.這一步是創建Makefile很重要的一步,automake要用的腳本配置文件是Makefile.am,用戶需要自己創建相應的文件。之后,automake工具轉換成Makefile.in。

這個Makefile.am的內容如下:
------------------------------------------------
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c
------------------------------------------------

下面對該腳本文件的對應項進行解釋。
    其中的AUTOMAKE_OPTIONS為設置automake的選項。由于GNU(在第1章中已經有所介紹)對自己發布的軟件有嚴格的規范,比如必須附 帶許可證聲明文件COPYING等,否則automake執行時會報錯。automake提供了三種軟件等級:foreign、gnu和gnits,讓用 戶選擇采用,默認等級為gnu。在本例使用foreign等級,它只檢測必須的文件。
    bin_PROGRAMS定義要產生的執行文件名。如果要產生多個執行文件,每個文件名用空格隔開。
    main_SOURCES定義“main”這個執行程序所需要的原始文件。如果”main”這個程序是由多個原始文件所產生的,則必須把它所用到的所有原 始文件都列出來,并用空格隔開。例如:若目標體“main”需要“main.c”、“sunq.c”、“main.h”三個依賴文件,則定義 main_SOURCES=main.c sunq.c main.h。要注意的是,如果要定義多個執行文件,則對每個執行程序都要定義相應的file_SOURCES。

其次
使用automake對其生成“configure.in”文件,在這里使用選項“—adding-missing”可以讓automake自動添加有一些必需的腳本文件。
運行后的狀態是:
------------------------------------------------
[root@localhost main]# automake --add-missing
configure.in:8: installing `./missing'
configure.in:8: installing `./install-sh'
Makefile.am: installing `./depcomp'
[root@localhost main]# ls
aclocal.m4      config.h.in   configure.in~ main.c        Makefile.in
autom4te.cache configure     depcomp        Makefile.am missing
autoscan.log    configure.in install-sh     Makefile.am~
[root@localhost main]#
------------------------------------------------

第八步
運行configure,在這一步中,通過運行自動配置設置文件configure,把Makefile.in變成了最終的Makefile。
運行的結果如下:
------------------------------------------------
[root@localhost main]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
[root@localhost main]# ls
aclocal.m4      config.h.in    configure.in   main.c        Makefile.in
autom4te.cache config.log     configure.in~ Makefile      missing
autoscan.log    config.status depcomp        Makefile.am   stamp-h1
config.h        configure      install-sh     Makefile.am~
[root@localhost main]#
------------------------------------------------

第九步
運行 make,對配置文件Makefile進行測試一下

此時的狀態如下:
------------------------------------------------
[root@localhost main]# make
cd . && /bin/sh /root/project/main/missing --run aclocal-1.10
cd . && /bin/sh /root/project/main/missing --run automake-1.10 --foreign
cd . && /bin/sh /root/project/main/missing --run autoconf
/bin/sh ./config.status --recheck
running CONFIG_SHELL=/bin/sh /bin/sh ./configure   --no-create --no-recursion
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
configure: creating ./config.status
/bin/sh ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
cd . && /bin/sh /root/project/main/missing --run autoheader
rm -f stamp-h1
touch config.h.in
make all-am
make[1]: Entering directory `/root/project/main'
gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -g -O2   -o main main.o
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make[1]: Leaving directory `/root/project/main'
[root@localhost main]# ls
aclocal.m4      autoscan.log config.h.in config.status configure.in   depcomp     main    main.o    Makefile.am   Makefile.in stamp-h1
autom4te.cache config.h      config.log   configure      configure.in~ install-sh main.c Makefile Makefile.am~ missing
[root@localhost main]#
------------------------------------------------

第十步
運行生成的文件 main:
------------------------------------------------
[root@localhost main]# ./main
Hello, Auto Makefile!
[root@localhost main]#
------------------------------------------------



我用的是ubuntu
以上就是全文了.但有一處要改:用aclocal
全報有一個m4文件有錯.找到報錯的那一行.把變量加個中括號就可以了.

下面來分別解釋一下上面的文件和命令:
    autoscan :           用來掃描源代碼的目錄生成configure.scan,如果不指定掃描目錄,則他會掃描當前工作目錄,
    configure.scan : 包含了系統配置的基本選項,一般用來制作configure.in文件。
    configure.in :      該文件的內容都是一些宏,其中的順序沒有硬性的規定,不過建議的順序是:
                    AC_INIT
                        測試程序
                        測試函數
                        測試頭文件
                        測試類型定義
                        測試結構
                        測試編譯器
                        測試庫函數
                        測試系統調用
                    AC_OUTPOUT
                    更詳細的請參閱《GNU/Linux編程指南(第二版)》

    aclocal:             根據configure.in的內容自動生成aclocal.m4文件,其定義為:alocal : creat alocal.m4 by scanning configure.ac
    alocal.m4 :          在執行automake的時候還需要其他的一些宏,這就由alocal產生。當有了 configure.in和alocal.m4兩個宏文件后,就可以用automake來產生Makefile.in文件了。
    autoconf:          用來產生configure腳本程序。
    configure:         他能根據不同的系統,產生不同的Makefile,從而是我們的程序具有可移植性。他還有一些參數:
                    --cache-file=FILE                                            測試系統的特性,并將結果放到FILE中

                    --help                                                               輸出幫助信息

                    --no-create                                                      阻止其生成輸出文件

                    --quiet                                                               執行是不做輸出

                    --silent                                                              同上,若設置則不會有任何輸出到屏幕

                    --version                                                          輸出automake的版本號

                    --prefix=PEWFIX                                             安裝位置設置(常用)

                    --exec-prefix=EPREFIX                                  設置結構倚賴的文件的安裝位置

                    --bindir=DIR                                                指定可執行文件的安裝位置.

                    --sbindir=DIR                                                    指定超級用戶可執行的安裝位置.

                    --libexecdir=DIR                                              指定可執行支持文件的安裝位置.
                    --datadir=DIR                                              指定通用數據文件的安裝位置.

                    --sysconfdir=DIR                                        指定只讀數據的安裝位置.

                    --sharedstatedir=DIR                                   指定共享的可寫數據的安裝位置.

                    --localstatedir=DIR                                     指定(非共享)可寫數據的安裝位置.

                    --libdir=DIR                                                 指定庫文件的安裝位置.

                    --includedir=DIR                                         指定C頭文件的安裝位置.

                    --oldincludedir=DIR                                   指定為除GCC外編譯器安裝的C頭文件的安裝位置.

                    --infodir=DIR                                               指定Info格式文檔的安裝位置.

                    --mandir=DIR                                               指定手冊頁的安裝位置.

                    --srcdir=DIR                                                源碼的位置

                    --program-prefix=PREFIX                         增加安裝程序名字前綴.

                    --program-suffix=SUFFIX                          增加安裝程序名字后綴.

                    --program-transform-name=PROGRAM  產生安裝名

                    --build=BUILD                                              指定軟件包安裝的系統平臺.

                    --host=HOST                                                指定軟件運行的系統平臺.
                    --target=GARGET                                        指定軟件面向的系統平臺

                    --disable-FEATURE                                     提供為大型選項的編譯時配置

                    --enable-FEATURE[=ARG]                           提供了一些默認被禁止的特性

                    --enable-FEATURE=no                                     同--disable-FEATURE

                    --with-PACKAGE[=ARG]                              使用已有軟件包和庫
                    --with-PACKAGE=no                                         --without-PACKAGE同義

                    --without-PACKAGE                                    禁止軟件包與系統已有的軟件包交互

                    --x-includes=DIR                                         --with-PACKAGE的一個特例

                    --x-libraries=DIR                                        向configure腳本指明包含X11庫的目錄
    makefile.am :      根據他生成makefile.in文件。
                    AUTOMAKE_OPTIONS = foreign                         設置automake的選項,設置成foreign表示按一般軟件處理。
                    bin_PROGRAMS = filename1 [...]       產生的可執行文件名
                    filename1_SOURCES = f1.c f2.c                       指明生成filename可執行文件的源碼                            
                    [...]
                    filename_LDADD =
                    filename_LDFLAGS =
                    filename_DEPENDENCIES =
                    靜態庫lib_LIBRARIES = libfilename.a
                    filename_a_SOURCES =
                    filename_a_LDADD =
                    filename_a_LIBADD =
                    filename_a_LDFALGS =
                    頭文件include_HEADERS = filename.h
                    數據文件data_DATA = data1 data2
                    (對于可執行文件和靜態庫類型如果只想編譯,不想安裝到系統中,可以用:noinst_PROGRAMS代替bin_PROGRAMS
                    和noinst_LIBRARIES代替lib_LIBRARIES)
    automake :          使用automake --add-missing來生成Makefile.in文件,后面的選項使我們制作出來的Makfile符合GNU的習慣,
    Makefile :             GNU的習慣:
                    make                     編譯,連接,生成可執行文件;
                    make clean          清除編譯產生的obj文件,以及可執行文件;
                    make install         安裝到系統中,一般是/usr/local/bin
                    make dist             將源碼打包,以便發布
                    make diskcheck 生成包,并對其進行檢查,以確保其正確性;

以上相關鏈接:http://www.cnblogs.com/Safe3/archive/2009/02/10/1387460.html
                    http://blog.csdn.net/hadesgin/article/details/6704371


 

posted on 2012-11-08 15:37 王海光 閱讀(1511) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久激情婷婷| 欧美一区二区三区免费观看| 亚洲国产美女久久久久| 欧美激情在线免费观看| 欧美一区二区三区男人的天堂| 国产日韩亚洲欧美| 欧美精品一区二区三区一线天视频| 久久久久久久综合色一本| 香蕉免费一区二区三区在线观看 | 亚洲欧美激情四射在线日| 亚洲国产一区二区三区高清| 久久久91精品国产一区二区三区| 国产一区二区三区最好精华液| 久久免费视频这里只有精品| 久久久精品动漫| 久久精品国产99精品国产亚洲性色| 亚洲第一精品影视| 亚洲电影在线免费观看| 亚洲激情第一页| 亚洲精品国产日韩| 99xxxx成人网| 亚洲在线网站| 久久精品视频免费观看| 另类激情亚洲| 欧美人在线观看| 国产精品乱码一区二三区小蝌蚪| 久久综合九九| 欧美多人爱爱视频网站| 欧美日韩国产色站一区二区三区| 欧美影院一区| 麻豆精品在线播放| 欧美激情二区三区| 欧美日韩亚洲综合| 欧美午夜视频在线| 国产在线视频欧美| 99一区二区| 久久精品卡一| 欧美激情国产日韩精品一区18| 久久激情综合| 亚洲第一色在线| 亚洲桃色在线一区| 久久精品欧美日韩精品| 欧美不卡视频| 国产精品福利在线| 午夜激情一区| 国产精品嫩草影院一区二区 | 在线一区二区日韩| 亚洲欧美伊人| 欧美波霸影院| 国产精品一区二区三区成人| 国产午夜精品全部视频在线播放| 国产精品爽黄69| 亚洲国产第一| 午夜精品一区二区三区在线播放 | 亚洲成人自拍视频| 国产精品99久久久久久人| 在线观看日韩www视频免费| 在线视频日韩| 久久久国产精品一区| 亚洲精品一区二区在线观看| 欧美在线一二三区| 欧美日韩综合视频| 亚洲高清不卡一区| 久久久亚洲国产天美传媒修理工| 久久精品人人做人人爽电影蜜月| 欧美在线影院在线视频| 日韩午夜激情电影| 欧美成人精品在线| 黄色国产精品一区二区三区| 久久爱www久久做| 99国产精品久久久久久久久久 | 久久精品国产99国产精品澳门| 久久国产精品久久久久久久久久| 亚洲色无码播放| 蜜桃av一区二区三区| 国产一区美女| 久久精品综合网| 亚洲一区三区电影在线观看| 欧美国产一区二区| 亚洲三级影院| 欧美电影在线观看| 久久精选视频| 国内精品视频在线播放| 午夜激情综合网| 99视频在线观看一区三区| 欧美日本中文| 一本久道久久久| 亚洲人成在线免费观看| 欧美不卡在线视频| 亚洲高清123| 亚洲国产成人精品视频| 欧美高清视频www夜色资源网| 欧美日韩一区二区三区在线看| 欧美午夜精品久久久久久人妖 | 欧美另类在线播放| 一二三区精品| 亚洲男女自偷自拍图片另类| 久久久久**毛片大全| 在线亚洲电影| 欧美大片一区二区| 男人插女人欧美| 日韩一本二本av| 亚洲精品欧美日韩专区| 欧美精品自拍偷拍动漫精品| 一本大道久久a久久精二百| 亚洲精品专区| 欧美日本国产| 欧美一区二区在线看| 欧美中文字幕在线观看| 国产有码在线一区二区视频| 久久午夜视频| 欧美99在线视频观看| 日韩亚洲欧美精品| 亚洲天堂激情| 一区二区在线观看av| 欧美va天堂| 欧美日韩视频| 久久精品国产久精国产一老狼| 日韩视频精品在线| 国产精品私拍pans大尺度在线| 亚洲日韩第九十九页| 亚洲美女尤物影院| 黄网站色欧美视频| 亚洲激情亚洲| 国产精品高潮在线| 免费看成人av| 欧美不卡福利| 久久精品首页| 欧美日韩日本视频| 久久亚洲欧美国产精品乐播| 欧美激情一区二区三区在线视频| 亚洲电影观看| 99视频超级精品| 国产精品久久久久91| 久久免费精品视频| 欧美美女bb生活片| 久久精品国亚洲| 免费亚洲一区二区| 久久国产视频网站| 欧美va亚洲va香蕉在线| 亚洲欧美日韩天堂一区二区| 久久先锋影音| 亚洲愉拍自拍另类高清精品| 久久久久久久一区二区| 午夜视频在线观看一区二区三区| 日韩一区二区精品在线观看| 国产日韩综合| 91久久久一线二线三线品牌| 国产午夜精品理论片a级大结局| 午夜精品在线看| 美脚丝袜一区二区三区在线观看| 国产丝袜美腿一区二区三区| 欧美激情中文字幕一区二区| 欧美特黄一级| 久久久99精品免费观看不卡| 亚洲国产精品久久| 亚洲一区日韩在线| 亚洲欧洲日产国产网站| 亚洲午夜极品| 99这里只有精品| 蜜桃精品久久久久久久免费影院| 亚洲激情欧美| 免费欧美视频| 欧美成人蜜桃| 国产日韩精品一区| 亚洲欧美日本国产有色| 亚洲一级电影| 欧美日韩国产123区| 亚洲日本欧美在线| 亚洲国产精品悠悠久久琪琪| 久久婷婷av| 男女精品网站| 亚洲国产精品电影| 久热精品视频在线观看| 久久久精品国产免大香伊| 国产手机视频精品| 久久亚洲春色中文字幕| 韩日视频一区| 久久久成人精品| 蜜臀a∨国产成人精品| 国内精品福利| 久久伊人一区二区| 欧美激情a∨在线视频播放| 亚洲黄色精品| 欧美精品videossex性护士| 亚洲国产精品v| 9人人澡人人爽人人精品| 欧美精品久久一区二区| 99在线精品观看| 性欧美办公室18xxxxhd| 国产精品人人做人人爽人人添 | 亚洲一区中文字幕在线观看| 欧美在线国产精品| 国产一区二区无遮挡| 美女在线一区二区| 99国产精品99久久久久久| 先锋亚洲精品| 亚洲高清资源| 欧美日韩国产综合久久| 亚洲尤物视频在线|