GNU Autoconf / Automake #4

800 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
800
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

GNU Autoconf / Automake #4

  1. 1. GNU Autoconf / Automake 工作坊使用 Automake 來維護 Makefile 依瑪貓/楊士青<imacat@mail.imacat.idv.tw> 2012/7/28
  2. 2. 「使用 Automake 來維護 Makefile 」簡報由 依瑪貓╱楊士青 製作,以 創用CC Attribution-ShareAlike 3.0 Unported 授權條款 釋出。
  3. 3. 自我介紹• 依瑪貓╱楊士青• 2001 年起參與國內外自由軟體社群開發• SourceForge vsntp 等專案• 現為 Apache OpenOffice 開發團隊成員
  4. 4. Automake
  5. 5. 前一節所寫的 Makefile.in , 其實太過簡單。
  6. 6. 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。
  7. 7. 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。• 沒有 make check 。
  8. 8. 前一節所寫的 Makefile.in• 沒有 make install 。 – 也沒有處理 configure 設定的 prefix 。• 沒有 make check 。• 如果要加上前兩個功能,還有其它進階功 能(例如要深入子目錄 make ), Makefile.in 要寫得非常複雜!
  9. 9. 使用 Automake 建立嚴謹的 Makefile
  10. 10. Automake 的目的,是為了建立嚴格符合 GNU 標準的 專案和 Makefile 。
  11. 11. 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。
  12. 12. 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。• 要有下列檔案: – INSTALL, NEWS, README, AUTHORS, ChangeLog, COPYING, THANKS
  13. 13. 嚴格符合 GNU 標準的專案• 請參閱 GNU Coding Standards。• 要有下列檔案: – INSTALL, NEWS, README, AUTHORS, ChangeLog, COPYING, THANKS• 要有下列 make targets : – install, uninstall, check, dist, clean, distclean… 等。
  14. 14. 但是 Automake 也容許不符 GNU Coding Standards 的專案。
  15. 15. 即使不符 GNU Coding Standards , 使用 Automake 也會非常方便。
  16. 16. Automake 的運作原理
  17. 17. Automake 的運作原理• 由 Makefile.am 範本建立 Makefile.in 。
  18. 18. Automake 的運作原理• 製作 Makefile.am 範本檔。• 修改 configure.ac ,加入 Automake 。• 執行 automake ,將 Makefile.am 範本 檔轉為 Makefile.in 。
  19. 19. 製作 Makefile.am 範本檔
  20. 20. Makefile.am 範本檔## Automake.amAUTOMAKE_OPTIONS = foreignsbin_PROGRAMS = vsntpvsntp_SOURCES = vsntp.c
  21. 21. Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。
  22. 22. Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。
  23. 23. Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。 • gnu: GNU 程式,遵守 GNU Coding Standards 的規定。
  24. 24. Makefile.am 範本檔 AUTOMAKE_OPTIONS• AUTOMAKE_OPTIONS – 設定 automake 要檢查,符合 GNU Coding Standards 的程度。 • foreign: 非 GNU 程式,只要能配合 Automake 就可以了。 • gnu: GNU 程式,遵守 GNU Coding Standards 的規定。 • gnits: GNU 程式,除遵守 GNU Coding Standards 的規定外,還遵守 gnits 小組的內規。
  25. 25. Makefile.am 範本檔 sbin_PROGRAMS• sbin_PROGRAMS – 要裝在 ./configure --sbindir=DIR 目錄下的 程式。 sbin 下為系統管理用的程式。
  26. 26. Makefile.am 範本檔 sbin_PROGRAMS• sbin_PROGRAMS – 要裝在 ./configure --sbindir=DIR 目錄下的 程式。 sbin 下為系統管理用的程式。 – bin_PROGRAMS 列出的程式,則是要裝 在 ./configure --bindir=DIR 目錄下的程式。 bin 下為一般人皆可管理用的程式。
  27. 27. Makefile.am 範本檔 sbin_PROGRAMS• <prog>_SOURCES – <prog> 是由哪些原始程式檔 build 出來的。
  28. 28. Makefile.am 範本檔 sbin_PROGRAMS• <prog>_SOURCES – <prog> 是由哪些原始程式檔 build 出來的。 – 例如 vsntp_SOURCES ,列出的是 vsntp 的 原始程式檔。
  29. 29. configure.ac 加 automake
  30. 30. 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
  31. 31. 執行 automake
  32. 32. 執行 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%
  33. 33. 執行 automake 還缺少三個檔案install-sh, missing, depcomp , 也缺少 config.h.in 。
  34. 34. 第一次執行 automake 時,改執行 autoreconf --install ,以安裝 automake 所需的檔案。
  35. 35. autoreconf 是 autoconf 的程式, 方便已由 autoconf 管理的專案, 更新管理檔案。
  36. 36. autoreconf 會陸續執行: autoconf, autoheader, aclocal,automake, libtoolize 及 autopoint 。
  37. 37. autoreconf --install會安裝 automake 需要的檔案。
  38. 38. 執行 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%
  39. 39. 接下來,就可以執行標準的安裝程序了: ./configure; make; make install
  40. 40. 撰寫 Makefile.am
  41. 41. Makefile.pm 的格式為:< 目錄類別 >_< 檔案類別 > = < 清單 > 例如: sbin_PROGRAMS = vsntp
  42. 42. 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。
  43. 43. 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。• bin_PROGRAMS 會裝在 --bindir 中。
  44. 44. 撰寫 Makefile.am <*>_PROGRAMS• PROGRAMS 表示編譯出來的程式。• bin_PROGRAMS 會裝在 --bindir 中。• sbin_PROGRAMS 會裝在 --sbindir 中。
  45. 45. 撰寫 Makefile.am <*>_LIBRARIES• LIBRARIES 表示共用的函式庫。
  46. 46. 撰寫 Makefile.am <*>_LIBRARIES• LIBRARIES 表示共用的函式庫。• lib_LIBRARIES 會裝在 --libdir 中。
  47. 47. 撰寫 Makefile.am <*>_HEADERS• HEADERS 表示 .h 檔。
  48. 48. 撰寫 Makefile.am <*>_HEADERS• HEADERS 表示 .h 檔。• include_HEADERS 會裝在 --includedir 中。
  49. 49. 撰寫 Makefile.am <*>_DATA• DATA 表示資料檔。
  50. 50. 撰寫 Makefile.am <*>_DATA• DATA 表示資料檔。• data_DATA 會裝在 --datadir 中。
  51. 51. 撰寫 Makefile.am EXTRA_DIST• EXTRA_DIST 表示額外屬於這個專案的檔 案,包括標準說明檔外的額外說明檔,等 等。
  52. 52. 撰寫 Makefile.am SUBDIRS• SUBDIRS 表示要進入 make 的子目錄。
  53. 53. 撰寫 Makefile.am SUBDIRS• SUBDIRS 表示要進入 make 的子目錄。• 不論有沒有程式碼,只要內有專案相關的 檔案,都要列進來,以便 make dist 打包 套件,及 make install 安裝時,可以進入 遞迴安裝。
  54. 54. 標準的 make targets
  55. 55. make all make check make install這些可以 make 的目標(all, check, install) 稱為 make targets
  56. 56. Automake 支援 GNU 標準的 targets它們源自 Unix 傳統流傳下來的 targets 使用 Automake 管理的專案, 也都支援這些標準 targets 。
  57. 57. 標準的 make targets
  58. 58. 標準的 make targets make all• make all – 全部編譯。
  59. 59. 標準的 make targets make all• make all – 全部編譯。 – all 可以省略,直接 make 就可以了。
  60. 60. 標準的 make targets make check• make check – 編譯後執行自我測試。
  61. 61. 標準的 make targets make check• make check – 編譯後執行自我測試。 – 如果還沒編譯好,會先編譯好。
  62. 62. 標準的 make targets make check• make check – 編譯後執行自我測試。 – 如果還沒編譯好,會先編譯好。 – 傳統 Unix 使用 make test ,不過為避免和 test 程式名稱衝突, automake 改用 make check 。如果
  63. 63. 標準的 make targets make install• make install – 編譯後安裝。
  64. 64. 標準的 make targets make install• make install – 編譯後安裝。 – 如果還沒編譯好,會先編譯好。
  65. 65. 標準的 make targets make install• make install – 編譯後安裝。 – 如果還沒編譯好,會先編譯好。 – 所以其實可以直接執行 • ./configure; make install
  66. 66. 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz
  67. 67. 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz – 會先建立 <app>-<ver> 資料夾,把要 release 的檔案存進去,再打包。 • 所以解壓縮後,會在 <app>-<ver> 資料夾下。
  68. 68. 標準的 make targets make dist• make dist – 打包成 release 檔。 • <app>-<ver>.tar.gz – 會先建立 <app>-<ver> 資料夾,把要 release 的檔案存進去,再打包。 • 所以解壓縮後,會在 <app>-<ver> 資料夾下。 – 方便專案 release 。
  69. 69. 標準的 make targets make clean• make clean – 清掉編譯出的檔案,如程式檔、函式庫、 .o 檔 等。
  70. 70. 標準的 make targets make clean• make clean – 清掉編譯出的檔案,如程式檔、函式庫、 .o 檔 等。 – 方便重新編譯 make 。
  71. 71. 標準的 make targets make distclean• make distclean – 清掉所有非套件 release 的檔案,包括 make clean ,及 cache 快取檔、 configure 產生的 檔案,等等。
  72. 72. 總結
  73. 73. 以 Automake 建立自己的專案• 製作 Makefile.am 範本檔。• 修改 configure.ac ,加入 Automake 。• 執行 autoreconf ,建立其它的所有檔案。
  74. 74. Makefile.am 範本檔的格式• bin_PROGRAMS• sbin_PROGRAMS• lib_LIBRARIES• <prog>_SOURCES• include_HEADERS• data_DATA• EXTRA_DIST• SUBDIRS
  75. 75. 標準的 make targets• make (or make all)• make check• make install• make dist• make clean• make distclean
  76. 76. 參考資料 進一步的資料,請參閱 GNU Automake線上說明文件 。
  77. 77. 參考資料• GNU 編譯系統還包括 libtool 及 gettext ,歡迎參閱: – 函式庫建立工具 libtool。 – 多語化翻譯工具 gettext。
  78. 78. 謝謝。歡迎提出問題。

×