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

隨筆 - 70, 文章 - 0, 評論 - 9, 引用 - 0
數(shù)據(jù)加載中……

MSYS下automake使用,以及configure.in和Makefile.am的修改

automake使用:

    1
)運(yùn)行autoscan命令,產(chǎn)生configure.scan文件;
    2
)將configure.scan 文件重命名為configure.in,并修改configure.in文件;
    3
)運(yùn)行aclocal命令,產(chǎn)生aclocal.m4文件;
    4
)運(yùn)行autoconf命令,產(chǎn)生configure文件;
    5
)新建Makefile.am文件,新建NEWS README ChangeLog AUTHORS文件;
    6
)修改Makefile.am,并運(yùn)行automake -a命令;(也可automake –add-missing
    7
)運(yùn)行./confiugre腳本。
    8
)至此,Makefile已生產(chǎn),然后執(zhí)行make編譯即可。


其中configure.in和Makefile.am需要手動修改。

configure.in

原理:Autoconf 是用來產(chǎn)生 'configure' 檔的工具。'configure' 是一個 shell script,它可以自動設(shè)定原始程序以符合各

種不同平臺上 Unix 系統(tǒng)的特性,并且根據(jù)系統(tǒng)叁數(shù)及環(huán)境產(chǎn)生合適的 Makefile 檔或是C 的標(biāo)頭檔 (header file),讓原始

程序可以很方便地在這些不同的平臺上被編譯出來。Autoconf 會讀取 configure.in 檔然後產(chǎn)生 'configure' 這個 shell

script。

configure.in 檔的內(nèi)容是一連串 GNU m4 的巨集,這些巨集經(jīng)過autoconf 處理後會變成檢查系統(tǒng)特徵的 shell script。

configure.in 內(nèi)巨集的順序并沒有特別的規(guī)定,但是每一個 configure.in 檔必須在所有巨集前加入 AC_INIT 巨集,然後在

所有巨集的最後面加上 AC_OUTPUT 巨集。我們可先用 autoscan 掃描原始檔以產(chǎn)生一個 configure.scan 檔,再對

configure.scan 做些修改成 configure.in 檔。

示例:
AC_INIT(src/hello.c)

AM_CONFIG_HEADER(config.h)

AM_INIT_AUTOMAKE(GnomeHello, 0.1)

AM_MAINTAINER_MODE

AM_ACLOCAL_INCLUDE(macros)

GNOME_INIT

AC_PROG_CC
AC_ISC_POSIX
AC_HEADER_STDC
AC_ARG_PROGRAM
AM_PROG_LIBTOOL

GNOME_COMPILE_WARNINGS

ALL_LINGUAS="da de es fr gl nl no pl ru sv fi uk"
AM_GNU_GETTEXT

AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)

AC_OUTPUT([
Makefile
macros/Makefile
src/Makefile
intl/Makefile
po/Makefile.in
pixmaps/Makefile
doc/Makefile
doc/C/Makefile
doc/es/Makefile
])
 
dnl 后面的字不會被處理,可視為注解。

AC_INIT(FILE) 用來檢查原始碼所在的路徑,autoscan 會自動產(chǎn)生

AM_INIT_AUTOMAKE(PACKAGE,VERSION) 是使用 Automake 所必備的巨集,PACKAGE 是我們所要產(chǎn)生軟體套件的名稱,VERSION

是版本編號。

AM_MAINTAINER_MODE([enable]) 是否可以重新編譯。關(guān)閉缺省時僅供程序維護(hù)者使用的makefile目標(biāo),并修改以使configure能理解 --enable-maintainer-mode選項。--enable-maintainer-mode將maintaineronly目標(biāo)重新打 開。僅供維護(hù)者使用的makefile目標(biāo)允許最終用戶清除自動生成的文件, 比如configure,這意味著要修復(fù)編譯故障,必須安裝有autoconf和automake軟件。注意, 因為autogen.sh腳本主要是給開發(fā)人員用的,autogen.sh會自動傳遞一個--enable- maintainer-mode選項給configure。
AM_MAINTAINER_MODE allows you to choose whether the so called "rebuild rules" should be enabled or disabled. With AM_MAINTAINER_MODE([enable]), they are enabled by default, otherwise they are disabled by default. In the latter case, if you have AM_MAINTAINER_MODE in configure.ac, and run ‘./configure && make’, then make will *never* attempt to rebuild configure, Makefile.ins, Lex or Yacc outputs, etc. I.e., this disables build rules for files that are usually distributed and that users should normally not have to update.

AM_ACLOCAL_INCLUDE 制定一個附加目錄。

AC_PROG_CC 檢查系統(tǒng)可用的 C 編譯器,如果原始程序是用 C 寫的就需要這個巨集。
AC_PROG_CXX 制定C++編譯器。

AC_ISC_POSIX 添加一些在某些平臺上實現(xiàn)POSIX兼容需要的標(biāo)志。

AC_HEADER_STDC 檢查當(dāng)前平臺上是否有標(biāo)準(zhǔn)的ANSI頭文件,如果有,則定義STDC_HEADERS。

AC_ARG_PROGRAM 添加一些選項到configure中,讓用戶能夠修改安裝程序的名稱(如果在用戶系統(tǒng)上碰巧有一個與要安裝的程序名稱相同的程序,這是很有用的)。

AM_PROG_LIBTOOL 是由automake用來設(shè)置libtool的用途的。只在計劃編譯共享庫或動態(tài)可加載模塊時才需要設(shè)置這個值。

ALL_LINGUAS=“es”不是一個宏,只是一句shell代碼。它包含一個由空格分隔的語言種類縮寫表,對應(yīng)于po子目錄下的.po文件。.po文件包含翻譯成其他語言的文本,所以ALL_LINGUAS應(yīng)該列出程序已經(jīng)被翻譯成的所有語言。

AC_SUBST 輸出一個變量到由configure生成的文件中。

AC_CHECK_LIB(lib, function[, action_if_found[, action_if_not_found[, other_libs]]]) 對庫文件進(jìn)行檢查。檢查lib庫

中是否存在制定的函數(shù),當(dāng)測試成功時,執(zhí)行shell命令action_if_found,或者當(dāng)action_if_found為空時在輸出變量LIBS中添

加-llib。action_if_not_found把-lother_libs選項傳給link命令。
如:AC_CHECK_LIB([pthread], [pthread_rwlock_init]):測試pthread庫中是否存在pthread_rwlock_init函數(shù)。

AC_OUTPUT(FILE) 設(shè)定 configure 所要產(chǎn)生的檔案,如果是 Makefile 的話,configure 便會把它檢查出來的結(jié)果帶入

Makefile.in 檔然後產(chǎn)生合適的 Makefile。

實際上,我們使用 Automake 時,還須要一些其它的巨集,這些額外的巨集我們用 aclocal 來幫我們產(chǎn)生。執(zhí)行 aclocal 會

產(chǎn)生 aclocal.m4 檔,如果沒有特別的用途,我們可以不必修改它,用 aclocal 所產(chǎn)生的巨集會告訴 Automake 怎麼做。 


參考
http://developer.gnome.org/doc/GGAD/z69.html
http://www.ibm.com/developerworks/cn/linux/l-makefile/
http://oss.org.cn/ossdocs/gnu/linux1/makefile.html
http://socol.javaeye.com/blog/518863
http://blog.csdn.net/HNArke/archive/2010/06/25/5694723.aspx


Makefile.am
automake處理Makefile.am,生成一個符合標(biāo)準(zhǔn)的Makefile.in文件。
一般情況是在最上層目錄下寫一個Makefile.am,然后在每一個子目錄下分別寫一個Makefile.am文件。automake會從最 上層開始遞歸處理各個Makefile.am,然后生成一個Makefile.in。

可執(zhí)行文件:
bin_PROGRAMS=foo
foo_SOURCES=xxx.c
foo_LDADD=
foo_LDFLAGS=
foo_DEPENDENCIES=

靜態(tài)庫:
lib_LIBRARIES=libfoo.a
foo_a_SOURCES=
foo_a_LDADD=
foo_a_LIBADD=
foo_a_LDFLAGS=

頭文件:
include_HEADERS=foo.h

數(shù)據(jù)文件:
data_DATA=data1 data2

對于可執(zhí)行文件和靜態(tài)庫類型,如果只想編譯,不想安裝到系統(tǒng)中,可以用noinst_PROGRAMS代替bin_PROGRAMS,noinst_LIBRARIES代替lib_LIBRARIES。

可用的全局變量
INCLUDES 鏈接時所需要的頭文件
LDADD 鏈接時所需要的庫文件
LDFLAGS 鏈接時所需要的庫文件選項標(biāo)志
EXTRA_LIST 源程序和一些默認(rèn)的文件將自動打入.tar.gz包,其他文件若要進(jìn)入.tar.gz包可以用這種辦法,比如配置文件,數(shù)據(jù)文件等。
SUBDIRS 在處理本目錄之前要遞歸哪些子目錄

在Makefile.am中盡量使用相對路徑,系統(tǒng)預(yù)定義了兩個基本路徑:
$(top_srcdir) 工程最頂層目錄,用于引用源程序
$(top_builddir) 定義了生成目標(biāo)文件上最上層的目錄,用于引用.o等編譯出來的目標(biāo)文件


http://oss.org.cn/ossdocs/gnu/linux1/makefile.html

posted on 2011-01-18 10:20 seahouse 閱讀(4596) 評論(0)  編輯 收藏 引用 所屬分類: 編譯

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美另类| 亚洲国产精品久久久久秋霞影院| 欧美在线观看一区| 99精品视频免费在线观看| 久久久久久夜| 久久久久久久久岛国免费| 国产精品久久久一区二区三区| 91久久精品国产91久久性色tv| 韩日在线一区| 香蕉成人啪国产精品视频综合网| 亚洲免费视频网站| 欧美深夜影院| 99re66热这里只有精品3直播 | 欧美a一区二区| 免费成人高清视频| 伊人色综合久久天天| 欧美一级视频一区二区| 久久精品一区蜜桃臀影院| 国产精品素人视频| 亚洲综合清纯丝袜自拍| 亚洲欧美成人一区二区三区| 欧美日韩成人精品| 99热在线精品观看| 亚洲在线免费视频| 国产精品视频专区| 亚洲一区欧美激情| 欧美影院视频| 国产视频一区在线观看一区免费| 午夜精品久久久久久久| 久久精品视频亚洲| 一区二区在线免费观看| 美女精品一区| 日韩视频在线你懂得| 在线亚洲观看| 国产农村妇女毛片精品久久莱园子| 亚洲欧美韩国| 蜜桃伊人久久| 一区二区三区四区五区精品| 国产精品高潮呻吟| 久久精品国产96久久久香蕉| 免费成人毛片| 亚洲手机视频| 国产日韩精品一区观看| 久久久综合香蕉尹人综合网| 亚洲国产精品日韩| 一区二区免费在线观看| 国产精品网站在线| 久久久久久久综合| 亚洲精品免费一二三区| 午夜精品久久久久久99热软件| 国产日韩专区| 欧美顶级少妇做爰| 国产精品99久久久久久人| 久久久噜噜噜久噜久久| 亚洲精品三级| 国产一区二区三区日韩| 欧美大片在线观看| 亚洲欧美综合v| 最新中文字幕亚洲| 久久国产精品第一页| 亚洲精选国产| 国产一区清纯| 欧美日韩一区二区三区免费看| 欧美一级久久| 一本大道久久a久久综合婷婷| 久久中文在线| 午夜国产欧美理论在线播放| 亚洲国产成人91精品| 国产精品久久夜| 欧美**字幕| 欧美一区在线直播| 一二美女精品欧洲| 亚洲成人中文| 久久亚洲精品网站| 午夜精品一区二区三区在线视| 亚洲国产欧美一区二区三区久久 | 亚洲欧美在线免费| 亚洲品质自拍| 狠狠色丁香婷婷综合影院 | 欧美日韩99| 美女网站在线免费欧美精品| 亚洲男人影院| 一本大道久久a久久综合婷婷 | 国产精品h在线观看| 免费一级欧美在线大片| 久久久久久国产精品一区| 亚洲一区二区三区高清不卡| 亚洲激情视频在线| 亚洲第一网站| 欧美 日韩 国产在线| 久久久久久网址| 欧美一区二区女人| 亚洲欧美www| 亚洲一区免费观看| 亚洲天堂成人在线视频| 亚洲美女av黄| 一本大道av伊人久久综合| 亚洲国产另类精品专区 | 午夜国产精品视频| 亚洲伊人久久综合| 亚洲专区在线| 午夜精品三级视频福利| 欧美一级淫片aaaaaaa视频| 亚洲一区二区三区精品动漫| 亚洲视频电影在线| 亚洲综合精品四区| 欧美一区成人| 久久精品论坛| 麻豆精品一区二区av白丝在线| 久久综合网络一区二区| 乱码第一页成人| 亚洲福利一区| 亚洲巨乳在线| 亚洲一区二区av电影| 亚洲天堂男人| 欧美亚洲在线播放| 久久久久久伊人| 欧美成年人网站| 欧美性片在线观看| 国产欧美一区二区三区久久人妖| 国产视频在线观看一区二区三区| 国产日韩欧美综合| 亚洲国产激情| 99riav久久精品riav| 亚洲欧美激情视频| 久久精品99国产精品| 女女同性精品视频| 亚洲毛片在线观看| 亚洲一区在线播放| 久久尤物视频| 欧美亚一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美激情1区2区3区| 欧美午夜国产| 狠狠久久亚洲欧美| 夜夜嗨一区二区| 欧美一区二区三区在线| 欧美成人免费大片| 一区二区三区你懂的| 欧美在线免费观看亚洲| 久久视频在线看| 国产精品美女xx| 亚洲第一页在线| 亚洲女同性videos| 美国成人毛片| 中文精品视频一区二区在线观看| 欧美综合二区| 国产精品v日韩精品| 亚洲国产你懂的| 欧美在线免费一级片| 亚洲国产合集| 欧美在线影院| 国产精品白丝jk黑袜喷水| ●精品国产综合乱码久久久久| 亚洲一区3d动漫同人无遮挡| 久久一区二区三区四区| 亚洲三级免费电影| 久久久久久久欧美精品| 国产精品海角社区在线观看| 亚洲福利视频一区二区| 欧美在线免费| 日韩一级裸体免费视频| 麻豆国产精品va在线观看不卡| 国产精品自拍视频| 亚洲一二三区在线| 亚洲大胆人体视频| 久久精品国产77777蜜臀| 国产精品日韩专区| 一区二区三区精品国产| 亚洲国产高清自拍| 久久综合导航| 在线观看精品视频| 久久久蜜臀国产一区二区| 亚洲与欧洲av电影| 欧美亚韩一区| 亚洲一区二区三区精品动漫| 亚洲韩日在线| 你懂的网址国产 欧美| 尤物在线观看一区| 久久久久这里只有精品| 亚洲永久免费| 国产精品日日摸夜夜添夜夜av| 一区二区三区福利| 日韩亚洲欧美成人| 欧美视频中文字幕| 亚洲一区欧美二区| 一本色道久久88综合日韩精品 | 亚洲免费福利视频| 亚洲国产精品久久久久婷婷老年| 久久久久九九九九| 狠狠综合久久| 免费成人你懂的| 老司机午夜精品| 亚洲国产清纯| 亚洲欧洲一区二区在线观看| 欧美精品一区在线发布| 99视频热这里只有精品免费| 日韩视频第一页| 国产精品日韩精品| 久久久久久色|