• <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>
            隨筆 - 70, 文章 - 0, 評(píng)論 - 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需要手動(dòng)修改。

            configure.in

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

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

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

            script。

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

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

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

            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 后面的字不會(huì)被處理,可視為注解。

            AC_INIT(FILE) 用來(lái)檢查原始碼所在的路徑,autoscan 會(huì)自動(dòng)產(chǎn)生

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

            是版本編號(hào)。

            AM_MAINTAINER_MODE([enable]) 是否可以重新編譯。關(guān)閉缺省時(shí)僅供程序維護(hù)者使用的makefile目標(biāo),并修改以使configure能理解 --enable-maintainer-mode選項(xiàng)。--enable-maintainer-mode將maintaineronly目標(biāo)重新打 開。僅供維護(hù)者使用的makefile目標(biāo)允許最終用戶清除自動(dòng)生成的文件, 比如configure,這意味著要修復(fù)編譯故障,必須安裝有autoconf和automake軟件。注意, 因?yàn)閍utogen.sh腳本主要是給開發(fā)人員用的,autogen.sh會(huì)自動(dòng)傳遞一個(gè)--enable- maintainer-mode選項(xiàng)給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 制定一個(gè)附加目錄。

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

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

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

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

            AM_PROG_LIBTOOL 是由automake用來(lái)設(shè)置libtool的用途的。只在計(jì)劃編譯共享庫(kù)或動(dòng)態(tài)可加載模塊時(shí)才需要設(shè)置這個(gè)值。

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

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

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

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

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

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

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

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

            產(chǎn)生 aclocal.m4 檔,如果沒有特別的用途,我們可以不必修改它,用 aclocal 所產(chǎn)生的巨集會(huì)告訴 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,生成一個(gè)符合標(biāo)準(zhǔn)的Makefile.in文件。
            一般情況是在最上層目錄下寫一個(gè)Makefile.am,然后在每一個(gè)子目錄下分別寫一個(gè)Makefile.am文件。automake會(huì)從最 上層開始遞歸處理各個(gè)Makefile.am,然后生成一個(gè)Makefile.in。

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

            靜態(tài)庫(kù):
            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

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

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

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


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

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

            精品国产一区二区三区久久| 久久午夜福利电影| 亚洲国产高清精品线久久| 久久久亚洲欧洲日产国码aⅴ | 一本伊大人香蕉久久网手机| 亚洲国产精品无码久久98| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 亚洲中文字幕伊人久久无码| 久久精品国产精品亜洲毛片| 久久精品国产亚洲7777| 国产午夜福利精品久久| 久久亚洲精品视频| 99国内精品久久久久久久| 久久精品无码一区二区三区免费| 国产精品99久久不卡| 久久国产综合精品五月天| 亚洲国产成人精品女人久久久 | 久久婷婷五月综合国产尤物app | 欧美午夜精品久久久久久浪潮| 国产精品久久久久久久午夜片| 国产高潮国产高潮久久久91 | 久久久无码人妻精品无码| 久久精品麻豆日日躁夜夜躁| 精品久久久久久| 久久97久久97精品免视看| 亚洲欧美一级久久精品| 欧洲精品久久久av无码电影 | 国产亚洲精午夜久久久久久| 欧美午夜精品久久久久久浪潮| 久久中文骚妇内射| 91精品无码久久久久久五月天 | 中文无码久久精品| 久久中文娱乐网| 99久久做夜夜爱天天做精品| 久久久精品人妻一区二区三区蜜桃 | 99麻豆久久久国产精品免费| 久久精品国产99国产精品| 无码AV中文字幕久久专区| 国产精品VIDEOSSEX久久发布| 久久久久久午夜精品| 狠狠综合久久AV一区二区三区|