[心得] autoconf - 自動產生 Makefile 的好東西 (2)

看板NCTU_CS_EDA作者 (lionking - 辛巴)時間14年前 (2012/02/13 17:21), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
上一篇提到我們一開始需要先執行 autoscan 來掃描整個 project 掃描完後我們會看到資料夾內多了兩個檔案: autoscan.log 以及 configure.scan autoscan.log 是 log file,不過他是空的XD 而另外一個 configure.scan 則是之後要讓 autoconf 幫我們產生我們所要的 configure 這支 script 所必要的資料 而在剛剛 autoscan 時這裡面其實就已經具備了一些必要的資料了 以下分項說明: 1. # 開頭的東西照慣例,是註解 2. AC_PREREQ([2.65]) 這邊規定 autoconf 的版本要比這邊的數字還要新! 3. AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) 這是給 autoconf 用的起始資訊,不用動他 4. AC_CONFIG_SRCDIR([main.cpp]) 以及 AC_CONFIG_HEADERS([config.h]) 這兩行請直接註解他XD 這是用在有些 project release 後要讓別人可以依照自己的想法 自行對這個 project 作一些設定,不過他使用上有點複雜 所以請直接註解他不要讓他有作用XD 5. AC_PROG_CXX 這行依照 project 不同可能會變成 AC_PROG_C 不管是哪個,用意都是在檢查系統內有沒有 C/C++ compiler AC_PROG_C --> 檢查有沒有 gcc AC_PROG_CXX --> 檢查有沒有 g++ 6. 直到最後的 AC_OUTPUT 為止 可以註解掉也可以放著不理他 7. AC_OUTPUT 執行 configure 這支 script 結束後會產生什麼檔案 在這邊因為我們希望他自動產生 Makefile 所以請將他修改成 AC_OUTPUT(Makefile) OK~到此為止是 autoscan 幫我們弄出來的資料 接下來我們只要自行修改一個地方以符合我們的 project: 1. 請在 AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) 這行後面加上 AM_INIT_AUTOMAKE(PACKAGE, VERSION) 這一行是讓之後的 automake 可以正常執行 其中 PACKAGE 可以看成是這個 project 的名稱 VERSION 則是版本編號 所以這邊請自訂XD 加上這行後即可,接下來介紹 Makefile.am 要怎麼寫: 1. 請加上這行: AUTOMAKE_OPTIONS=foreign 這一行的用意是告訴 automake 不要照 GNU 的標準來做 不然他會要求你附上以下檔案: AUTHOR、README、ChangeLog、NEWS 檔案內容是空的也無妨 2. 加上以下這行: bin_PROGRAMS=(你要的執行檔名稱) 或者是 noinst_PROGRAMS=(你要的執行檔名稱) 兩者的差別在於前者是假設這個執行檔之後會被用來安裝 例如使用 $ make install 安裝到你的系統 而後者不會,所以產生出來的 Makefile 會不同 舉個例子來說,我可以這樣寫: noinst_PROGRAMS=hello 表示之後會產生一個名稱叫 hello 的執行檔 3. 根據剛剛設定好的執行檔名稱,寫上他需要由那些檔案編成: (執行檔名稱)_SOURCES=(需要那些檔案) 以剛剛的例子來說,假設要編出 hello 這個執行檔需要 main.cpp a.cpp b.cpp a.h b.h 這一行就寫成: hello_SOURCES=main.cpp a.cpp b.cpp a.h b.h 至於要怎麼由那些檔案編出 hello 這個執行檔 automake 自有辦法判斷,這邊不必寫明! 好! 這樣就大功告成啦! 接下來只要告剛剛第一篇的流程 就可以生出你想要的 configure 這支 script 囉! 當然 autoconf 還有很多東西可以講 包含說要怎麼判斷系統中有沒有什麼東西 可以在 configure 中設定 project 的參數等等 還有要 link 那些 library 之類的 這些東西~我就不多說了XD Reference: http://tinyurl.com/78t3hyr http://www.ibm.com/developerworks/cn/linux/l-makefile/ http://blog.roodo.com/rocksaying/archives/12687975.html http://jyhshin.pixnet.net/blog/post/26588146-using-automake-and-autoconf -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.241.158 ※ 編輯: shininglion 來自: 220.133.134.61 (02/13 19:48)
文章代碼(AID): #1FEDOHE8 (NCTU_CS_EDA)
文章代碼(AID): #1FEDOHE8 (NCTU_CS_EDA)