GNU Autoconf / Automake #4
Upcoming SlideShare
Loading in...5
×
 

GNU Autoconf / Automake #4

on

  • 896 views

GNU Autoconf / Automake工作坊(四)—使用Automake來維護Makefile ...

GNU Autoconf / Automake工作坊(四)—使用Automake來維護Makefile
http://www.openfoundry.org/tw/activities/details/318
發表於:GNU Autoconf / Automake工作坊
時間:2012/7/28(六) 9:30-16:30
地點:台灣科大 國際大樓 IB712
(共四集,請續點閱)
http://www.slideshare.net/imacat/gnu-autoconf-automake-1
http://www.slideshare.net/imacat/gnu-autoconf-automake-2
http://www.slideshare.net/imacat/gnu-autoconf-automake-3
http://www.slideshare.net/imacat/gnu-autoconf-automake-4

Statistics

Views

Total Views
896
Slideshare-icon Views on SlideShare
896
Embed Views
0

Actions

Likes
0
Downloads
10
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    GNU Autoconf / Automake #4 GNU Autoconf / Automake #4 Presentation Transcript

    • GNU Autoconf / Automake 工作坊使用 Automake 來維護 Makefile 依瑪貓/楊士青<imacat@mail.imacat.idv.tw> 2012/7/28
    • 「使用 Automake 來維護 Makefile 」簡報由 依瑪貓╱楊士青 製作,以 創用CC Attribution-ShareAlike 3.0 Unported 授權條款 釋出。
    • 自我介紹• 依瑪貓╱楊士青• 2001 年起參與國內外自由軟體社群開發• SourceForge vsntp 等專案• 現為 Apache OpenOffice 開發團隊成員
    • Automake
    • 前一節所寫的 Makefile.in , 其實太過簡單。
    • 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。
    • 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。• 沒有 make check 。
    • 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。• 沒有 make check 。• 如果要加上前兩個功能,還有其它進階功 能(例如要深入子目錄 make ), Makefile.in 要寫得非常複雜!
    • 使用 Automake 建立嚴謹的 Makefile
    • Automake 的目的,是為了建立嚴格符合 GNU 標準的 專案和 Makefile 。
    • 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。
    • 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。• 要有下列檔案: – INSTALL, NEWS, README, AUTHORS, ChangeLog, COPYING, THANKS
    • 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。• 要有下列檔案: – INSTALL, NEWS, README, AUTHORS, ChangeLog, COPYING, THANKS• 要有下列 make targets : – install, uninstall, check, dist, clean, distclean… 等。
    • 但是 Automake 也容許不符 GNU Coding Standards 的專案。
    • 即使不符 GNU Coding Standards , 使用 Automake 也會非常方便。
    • Automake 的運作原理
    • Automake 的運作原理• 由 Makefile.am 範本建立 Makefile.in 。
    • Automake 的運作原理• 製作 Makefile.am 範本檔。• 修改 configure.ac ,加入 Automake 。• 執行 automake ,將 Makefile.am 範本 檔轉為 Makefile.in 。
    • 製作 Makefile.am 範本檔
    • Makefile.am 範本檔## Automake.amAUTOMAKE_OPTIONS = foreignsbin_PROGRAMS = vsntpvsntp_SOURCES = vsntp.c
    • Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。
    • Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。
    • Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。 • gnu: GNU 程式,遵守 GNU Coding Standards 的規定。
    • Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。 • gnu: GNU 程式,遵守 GNU Coding Standards 的規定。 • gnits: GNU 程式,除遵守 GNU Coding Standards 的規定外,還遵守 gnits 小組的內規。
    • Makefile.am 範本檔 sbin_PROGRAMS• sbin_PROGRAMS – 要裝在 ./configure --sbindir=DIR 目錄下的 程式。 sbin 下為系統管理用的程式。
    • Makefile.am 範本檔 sbin_PROGRAMS• sbin_PROGRAMS – 要裝在 ./configure --sbindir=DIR 目錄下的 程式。 sbin 下為系統管理用的程式。 – bin_PROGRAMS 列出的程式,則是要裝 在 ./configure --bindir=DIR 目錄下的程式。 bin 下為一般人皆可管理用的程式。
    • Makefile.am 範本檔 sbin_PROGRAMS• <prog>_SOURCES – <prog> 是由哪些原始程式檔 build 出來的。
    • Makefile.am 範本檔 sbin_PROGRAMS• <prog>_SOURCES – <prog> 是由哪些原始程式檔 build 出來的。 – 例如 vsntp_SOURCES ,列出的是 vsntp 的 原始程式檔。
    • configure.ac 加 automake
    • configure.ac 加 automake# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.67])AC_INIT([vsntp], [2.0.0], [imacat@mail.imacat.idv.tw])AM_INIT_AUTOMAKEAC_CONFIG_SRCDIR([vsntp.c])AC_CONFIG_HEADERS([config.h])…AC_CONFIG_FILES([Makefile])AC_OUTPUT
    • 執行 automake
    • 執行 automake% automakeUseless use of /d modifier in transliteration operator at/usr/share/automake-1.9/Automake/Wrap.pm line 60.configure.ac: no proper invocation of AM_INIT_AUTOMAKE was found.configure.ac: You should verify that configure.ac invokesAM_INIT_AUTOMAKE,configure.ac: that aclocal.m4 is present in the top-level directory,configure.ac: and that aclocal.m4 was recently regenerated (usingaclocal).configure.ac: required file `./install-sh not foundconfigure.ac: required file `./missing not foundconfigure.ac:8: required file `config.h.in not foundMakefile.am: required file `./depcomp not found/usr/share/automake-1.9/am/depend2.am: am__fastdepCC does not appear inAM_CONDITIONAL/usr/share/automake-1.9/am/depend2.am: AMDEP does not appear inAM_CONDITIONAL%
    • 執行 automake 還缺少三個檔案install-sh, missing, depcomp , 也缺少 config.h.in 。
    • 第一次執行 automake 時,改執行 autoreconf --install ,以安裝 automake 所需的檔案。
    • autoreconf 是 autoconf 的程式, 方便已由 autoconf 管理的專案, 更新管理檔案。
    • autoreconf 會陸續執行: autoconf, autoheader, aclocal,automake, libtoolize 及 autopoint 。
    • autoreconf --install會安裝 automake 需要的檔案。
    • 執行 autoreconf% lsconfigure.ac Makefile.am vsntp.c% autoreconf --installUseless use of /d modifier in transliteration operator at/usr/share/automake-1.9/Automake/Wrap.pm line 60.configure.ac: installing `./install-shconfigure.ac: installing `./missingMakefile.am: installing `./depcomp% lsaclocal.m4 config.h.in configure.ac install-sh Makefile.in vsntp.cautom4te.cache configure depcomp Makefile.am missing%
    • 接下來,就可以執行標準的安裝程序了: ./configure; make; make install
    • 撰寫 Makefile.am
    • Makefile.pm 的格式為:< 目錄類別 >_< 檔案類別 > = < 清單 > 例如: sbin_PROGRAMS = vsntp
    • 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。
    • 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。• bin_PROGRAMS 會裝在 --bindir 中。
    • 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。• bin_PROGRAMS 會裝在 --bindir 中。• sbin_PROGRAMS 會裝在 --sbindir 中。
    • 撰寫 Makefile.am <*>_LIBRARIES• LIBRARIES 表示共用的函式庫。
    • 撰寫 Makefile.am <*>_LIBRARIES• LIBRARIES 表示共用的函式庫。• lib_LIBRARIES 會裝在 --libdir 中。
    • 撰寫 Makefile.am <*>_HEADERS• HEADERS 表示 .h 檔。
    • 撰寫 Makefile.am <*>_HEADERS• HEADERS 表示 .h 檔。• include_HEADERS 會裝在 --includedir 中。
    • 撰寫 Makefile.am <*>_DATA• DATA 表示資料檔。
    • 撰寫 Makefile.am <*>_DATA• DATA 表示資料檔。• data_DATA 會裝在 --datadir 中。
    • 撰寫 Makefile.am EXTRA_DIST• EXTRA_DIST 表示額外屬於這個專案的檔 案,包括標準說明檔外的額外說明檔,等 等。
    • 撰寫 Makefile.am SUBDIRS• SUBDIRS 表示要進入 make 的子目錄。
    • 撰寫 Makefile.am SUBDIRS• SUBDIRS 表示要進入 make 的子目錄。• 不論有沒有程式碼,只要內有專案相關的 檔案,都要列進來,以便 make dist 打包 套件,及 make install 安裝時,可以進入 遞迴安裝。
    • 標準的 make targets
    • make all make check make install這些可以 make 的目標(all, check, install) 稱為 make targets
    • Automake 支援 GNU 標準的 targets它們源自 Unix 傳統流傳下來的 targets 使用 Automake 管理的專案, 也都支援這些標準 targets 。
    • 標準的 make targets
    • 標準的 make targets make all• make all – 全部編譯。
    • 標準的 make targets make all• make all – 全部編譯。 – all 可以省略,直接 make 就可以了。
    • 標準的 make targets make check• make check – 編譯後執行自我測試。
    • 標準的 make targets make check• make check – 編譯後執行自我測試。 – 如果還沒編譯好,會先編譯好。
    • 標準的 make targets make check• make check – 編譯後執行自我測試。 – 如果還沒編譯好,會先編譯好。 – 傳統 Unix 使用 make test ,不過為避免和 test 程式名稱衝突, automake 改用 make check 。如果
    • 標準的 make targets make install• make install – 編譯後安裝。
    • 標準的 make targets make install• make install – 編譯後安裝。 – 如果還沒編譯好,會先編譯好。
    • 標準的 make targets make install• make install – 編譯後安裝。 – 如果還沒編譯好,會先編譯好。 – 所以其實可以直接執行 • ./configure; make install
    • 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz
    • 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz – 會先建立 <app>-<ver> 資料夾,把要 release 的檔案存進去,再打包。 • 所以解壓縮後,會在 <app>-<ver> 資料夾下。
    • 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz – 會先建立 <app>-<ver> 資料夾,把要 release 的檔案存進去,再打包。 • 所以解壓縮後,會在 <app>-<ver> 資料夾下。 – 方便專案 release 。
    • 標準的 make targets make clean• make clean – 清掉編譯出的檔案,如程式檔、函式庫、 .o 檔 等。
    • 標準的 make targets make clean• make clean – 清掉編譯出的檔案,如程式檔、函式庫、 .o 檔 等。 – 方便重新編譯 make 。
    • 標準的 make targets make distclean• make distclean – 清掉所有非套件 release 的檔案,包括 make clean ,及 cache 快取檔、 configure 產生的 檔案,等等。
    • 總結
    • 以 Automake 建立自己的專案• 製作 Makefile.am 範本檔。• 修改 configure.ac ,加入 Automake 。• 執行 autoreconf ,建立其它的所有檔案。
    • Makefile.am 範本檔的格式• bin_PROGRAMS• sbin_PROGRAMS• lib_LIBRARIES• <prog>_SOURCES• include_HEADERS• data_DATA• EXTRA_DIST• SUBDIRS
    • 標準的 make targets• make (or make all)• make check• make install• make dist• make clean• make distclean
    • 參考資料 進一步的資料,請參閱 GNU Automake線上說明文件 。
    • 參考資料• GNU 編譯系統還包括 libtool 及 gettext ,歡迎參閱: – 函式庫建立工具 libtool。 – 多語化翻譯工具 gettext。
    • 謝謝。歡迎提出問題。