[心得] autoconf - 自動產生 Makefile 的好東西 (2)
看板NCTU_CS_EDA作者shininglion (lionking - 辛巴)時間14年前 (2012/02/13 17:21)推噓0(0推 0噓 0→)留言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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):