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

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

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

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

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

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

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

查看configure.in的內(nèi)容:
------------------------------------------------
#                                               -*- 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版本。如果用于創(chuàng)建configure的Autoconf的版
# 本比version 要早,就在標(biāo)準(zhǔn)錯誤輸出打印一條錯誤消息并不會創(chuàng)建configure。
AC_PREREQ(2.61)

#
# 初始化,定義軟件的基本信息,包括設(shè)置包的全稱,版本號以及報告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.

#
# 創(chuàng)建輸出文件。在`configure.in'的末尾調(diào)用本宏一次。
#
AC_OUTPUT
------------------------------------------------

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


修改后的結(jié)果:
------------------------------------------------
#                                               -*- 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,該文件主要處理本地的宏定義。

此時的狀態(tài)是:
[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

此時的狀態(tài)是:
[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,它負(fù)責(zé)生成config.h.in文件。該工具通常會從“acconfig.h”文件中復(fù)制用戶附加的符號定義,因此此處沒有附加符號定義,所以不需要創(chuàng)建“acconfig.h”文件。

此時的狀態(tài)是:
[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, 但在此之前應(yīng)該做一下準(zhǔn)備工作!

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

這個Makefile.am的內(nèi)容如下:
------------------------------------------------
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=main.c
------------------------------------------------

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

其次
使用automake對其生成“configure.in”文件,在這里使用選項“—adding-missing”可以讓automake自動添加有一些必需的腳本文件。
運行后的狀態(tài)是:
------------------------------------------------
[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,在這一步中,通過運行自動配置設(shè)置文件configure,把Makefile.in變成了最終的Makefile。
運行的結(jié)果如下:
------------------------------------------------
[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進(jìn)行測試一下

此時的狀態(tài)如下:
------------------------------------------------
[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,如果不指定掃描目錄,則他會掃描當(dāng)前工作目錄,
    configure.scan : 包含了系統(tǒng)配置的基本選項,一般用來制作configure.in文件。
    configure.in :      該文件的內(nèi)容都是一些宏,其中的順序沒有硬性的規(guī)定,不過建議的順序是:
                    AC_INIT
                        測試程序
                        測試函數(shù)
                        測試頭文件
                        測試類型定義
                        測試結(jié)構(gòu)
                        測試編譯器
                        測試庫函數(shù)
                        測試系統(tǒng)調(diào)用
                    AC_OUTPOUT
                    更詳細(xì)的請參閱《GNU/Linux編程指南(第二版)》

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

                    --help                                                               輸出幫助信息

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

                    --quiet                                                               執(zhí)行是不做輸出

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

                    --version                                                          輸出automake的版本號

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

                    --exec-prefix=EPREFIX                                  設(shè)置結(jié)構(gòu)倚賴的文件的安裝位置

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

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

                    --libexecdir=DIR                                              指定可執(zhí)行支持文件的安裝位置.
                    --datadir=DIR                                              指定通用數(shù)據(jù)文件的安裝位置.

                    --sysconfdir=DIR                                        指定只讀數(shù)據(jù)的安裝位置.

                    --sharedstatedir=DIR                                   指定共享的可寫數(shù)據(jù)的安裝位置.

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

                    --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  產(chǎn)生安裝名

                    --build=BUILD                                              指定軟件包安裝的系統(tǒng)平臺.

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

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

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

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

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

                    --without-PACKAGE                                    禁止軟件包與系統(tǒng)已有的軟件包交互

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

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

以上相關(guān)鏈接: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 王海光 閱讀(1515) 評論(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>
            欧美丰满少妇xxxbbb| 精品动漫一区| 欧美亚洲三级| 久久综合中文| 亚洲伦理在线| 国产精品九色蝌蚪自拍| 性欧美1819sex性高清| 欧美a级一区二区| 在线综合亚洲欧美在线视频| 国产精品v欧美精品∨日韩| 亚洲宅男天堂在线观看无病毒| 久久精品99国产精品| 最新成人av网站| 国产精品久久久久aaaa樱花| 久久精品在线免费观看| 亚洲区一区二区三区| 午夜在线电影亚洲一区| 在线观看成人小视频| 欧美日韩免费视频| 久久精选视频| 亚洲精品在线观看免费| 久久久久欧美精品| 亚洲图片在区色| 国产亚洲一级| 欧美乱人伦中文字幕在线| 亚洲欧美日韩国产综合| 亚洲国产高清在线观看视频| 欧美一级艳片视频免费观看| 亚洲区欧美区| 国产在线精品成人一区二区三区| 欧美精品一区三区在线观看| 久久成人18免费观看| 99日韩精品| 欧美成人免费视频| 久久久久久97三级| 午夜国产精品影院在线观看| 日韩视频专区| 伊人蜜桃色噜噜激情综合| 国产精品热久久久久夜色精品三区| 老司机久久99久久精品播放免费| 亚洲欧美国产精品专区久久| 亚洲精品国久久99热| 欧美www视频| 久久精品国产欧美亚洲人人爽| 正在播放日韩| 亚洲精品国精品久久99热| 国内伊人久久久久久网站视频| 国产精品超碰97尤物18| 欧美金8天国| 欧美成人国产va精品日本一级| 久久国产手机看片| 午夜一区二区三视频在线观看 | 久久精品综合网| 亚洲天堂成人| 一本大道av伊人久久综合| 亚洲大胆av| 欧美激情第五页| 欧美刺激午夜性久久久久久久| 久久久精品一区| 久久久国产视频91| 久久久另类综合| 久久久999国产| 久久精品国产久精国产一老狼| 午夜日韩av| 亚洲免费影视第一页| 亚洲综合首页| 亚洲尤物在线视频观看| 亚洲欧美视频在线| 欧美影院在线播放| 欧美一区二区视频免费观看| 午夜在线一区| 久久国产精品电影| 久久久亚洲国产天美传媒修理工| 久久久久久久高潮| 免费成人激情视频| 欧美国产日韩视频| 亚洲精品日韩激情在线电影 | 中文精品视频一区二区在线观看| 亚洲麻豆av| 亚洲一区二区三区四区五区午夜 | 亚洲国产福利在线| 亚洲人成欧美中文字幕| 日韩一区二区电影网| 亚洲视频一二三| 新狼窝色av性久久久久久| 欧美亚洲专区| 麻豆9191精品国产| 欧美日韩视频一区二区三区| 欧美日韩三区四区| 国产深夜精品| 1024成人网色www| 亚洲免费电影在线| 午夜久久美女| 久久中文字幕一区二区三区| 欧美激情国产高清| 亚洲特级毛片| 久久九九国产| 欧美日韩第一区| 国产精品一区久久久| 在线观看不卡| 亚洲午夜女主播在线直播| 久久国产视频网| 欧美国产精品v| 亚洲一二三区视频在线观看| 久久久青草婷婷精品综合日韩 | 久久不射电影网| 欧美夫妇交换俱乐部在线观看| 国产精品swag| 亚洲黄色尤物视频| 香蕉久久夜色精品国产使用方法| 鲁大师成人一区二区三区| 亚洲片在线观看| 先锋影音一区二区三区| 欧美成人在线影院| 国产午夜精品美女视频明星a级| 最新日韩av| 久久激情网站| 日韩亚洲综合在线| 老司机凹凸av亚洲导航| 国产精品欧美久久| 日韩一区二区精品视频| 久久免费国产| 亚洲一区二区毛片| 欧美另类专区| 在线观看国产日韩| 欧美亚洲免费在线| 日韩一级免费| 嫩草成人www欧美| 国产在线精品自拍| 香蕉av福利精品导航| 亚洲精品一级| 欧美高清视频一区| 尤物精品国产第一福利三区| 欧美在线看片| 亚洲在线观看免费| 欧美日韩一区高清| 亚洲精品在线免费观看视频| 久久中文在线| 久久国产免费| 国产一区视频在线看| 亚洲欧美日韩一区在线| 99国产精品99久久久久久| 欧美不卡高清| 亚洲国产欧美一区二区三区久久 | 一区二区三区精品视频| 欧美激情精品久久久久久黑人| 久久av资源网站| 国产亚洲精品bt天堂精选| 性伦欧美刺激片在线观看| 在线视频欧美日韩| 欧美三级电影网| 一本色道久久综合亚洲91| 亚洲国语精品自产拍在线观看| 久久综合九色综合欧美就去吻| 一区二区三区在线不卡| 久久综合久久综合久久| 久久久久久黄| 亚洲第一成人在线| 欧美成在线视频| 麻豆成人精品| 91久久久久久久久久久久久| 欧美国产视频在线| 你懂的亚洲视频| 亚洲免费高清视频| 99re8这里有精品热视频免费| 欧美日韩亚洲系列| 亚洲欧美日韩综合| 午夜精品国产| 激情视频一区二区| 欧美国产大片| 欧美精品国产| 国产精品99久久99久久久二8 | 欧美亚洲系列| 极品裸体白嫩激情啪啪国产精品| 老司机午夜精品视频| 久久综合导航| 一区二区三区视频在线观看| 亚洲视频一区二区免费在线观看| 国产精品一区在线播放| 久久资源在线| 欧美激情第8页| 亚洲欧美在线免费| 久久国产精品72免费观看| 在线高清一区| 亚洲精品视频在线观看网站| 国产精品夜夜夜一区二区三区尤| 久久亚洲精品一区二区| 欧美激情第二页| 先锋亚洲精品| 女同一区二区| 性做久久久久久久久| 久久久www成人免费精品| 亚洲精品视频在线看| 亚洲一本大道在线| 亚洲第一久久影院| 亚洲视频视频在线| 在线看欧美视频| 一区二区三区国产精华| 影音先锋国产精品| 在线视频日本亚洲性|