• <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, 評論 - 9, 引用 - 0
            數據加載中……

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

            automake使用:

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


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

            configure.in

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

            種不同平臺上 Unix 系統的特性,并且根據系統叁數及環境產生合適的 Makefile 檔或是C 的標頭檔 (header file),讓原始

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

            script。

            configure.in 檔的內容是一連串 GNU m4 的巨集,這些巨集經過autoconf 處理後會變成檢查系統特徵的 shell script。

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

            所有巨集的最後面加上 AC_OUTPUT 巨集。我們可先用 autoscan 掃描原始檔以產生一個 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 會自動產生

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

            是版本編號。

            AM_MAINTAINER_MODE([enable]) 是否可以重新編譯。關閉缺省時僅供程序維護者使用的makefile目標,并修改以使configure能理解 --enable-maintainer-mode選項。--enable-maintainer-mode將maintaineronly目標重新打 開。僅供維護者使用的makefile目標允許最終用戶清除自動生成的文件, 比如configure,這意味著要修復編譯故障,必須安裝有autoconf和automake軟件。注意, 因為autogen.sh腳本主要是給開發人員用的,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 檢查系統可用的 C 編譯器,如果原始程序是用 C 寫的就需要這個巨集。
            AC_PROG_CXX 制定C++編譯器。

            AC_ISC_POSIX 添加一些在某些平臺上實現POSIX兼容需要的標志。

            AC_HEADER_STDC 檢查當前平臺上是否有標準的ANSI頭文件,如果有,則定義STDC_HEADERS。

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

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

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

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

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

            中是否存在制定的函數,當測試成功時,執行shell命令action_if_found,或者當action_if_found為空時在輸出變量LIBS中添

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

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

            Makefile.in 檔然後產生合適的 Makefile。

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

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

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

            靜態庫:
            lib_LIBRARIES=libfoo.a
            foo_a_SOURCES=
            foo_a_LDADD=
            foo_a_LIBADD=
            foo_a_LDFLAGS=

            頭文件:
            include_HEADERS=foo.h

            數據文件:
            data_DATA=data1 data2

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

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

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


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

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

            国产—久久香蕉国产线看观看| 久久婷婷成人综合色综合| 91精品国产91久久久久久| 久久亚洲欧美日本精品| 亚洲国产精品无码久久青草 | 国产 亚洲 欧美 另类 久久| A级毛片无码久久精品免费| 一本大道久久香蕉成人网| 久久久久久午夜成人影院| 国产精品99久久久久久猫咪| 2021国内久久精品| 国产69精品久久久久99| 无码人妻精品一区二区三区久久久| 91精品国产91久久久久久青草| 亚洲欧美另类日本久久国产真实乱对白| 久久久久久曰本AV免费免费| 久久精品国产免费一区| 亚洲精品国产字幕久久不卡| 国产成人精品久久亚洲高清不卡| 亚洲午夜无码久久久久| 狠狠色综合久久久久尤物| 91久久婷婷国产综合精品青草| 久久国产精品无| 久久精品中文字幕一区| 日韩精品久久久久久| 久久精品国产精品亚洲精品| 亚洲国产精品无码久久久蜜芽| 青青青青久久精品国产h久久精品五福影院1421 | 人妻久久久一区二区三区| 亚洲欧美一区二区三区久久| 久久99精品久久久久久野外 | 热久久这里只有精品| 久久99精品国产自在现线小黄鸭| 国产精品久久久久免费a∨| 久久综合视频网站| 亚洲精品无码久久毛片 | 久久综合久久自在自线精品自| yy6080久久| 香蕉久久夜色精品升级完成 | 狠狠色丁香婷婷综合久久来来去| 久久国产精品久久国产精品|