[心得] makefile的寫法

作者: craig08 (小佑)   2012-03-06 00:48:31
因為在寫makefile的時候遇到一些小問題
所以就上網查了一下
其實網路上資料是頗多的
既然已經查了就在這裡跟大家分享一下
=======================================================================
http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=185
http://www.cyut.edu.tw/~dywang/linuxProgram/node32.html
簡而言之
在terminal下打 make [target] 的時候
系統會自動去搜尋當前資料夾下的makefile或是Makefile檔案
然後尋找makefile中(target): 接著執行<tab>後面的那串指令
如果純粹只打make而不加任何target的話
預設會執行makefile的"第一個"target
makefile 的語法(syntax)
標的(target): [相依性1 相依性2...]
<tab> g++ [指令] source檔1 [source檔2...] -o 欲建立的執行檔
標的 (target) 與相依性之間需以『:』隔開。
<tab> 需要在命令行的第一個字元;
makefile 語法中之 <tab> 與空白:
所有的法則必須在同一行,而且行首必須為 <tab>;不能為空白。
在 makefile 中,行尾如果有一個空白,會造成 make 命令執行錯誤。
makefile 的註解(comment):
如同 C 原始碼檔案一般,在 makefile 中,以 # 為行首的文字都是註解。
makefile 中的註解只是協助作者和其它人,了解 makefile 的內容。
makefile 的語法規則:
makefile 是由很多相依性項目(dependencies)和法則(rules)所組成。
相依性項目,描述目標項目(target,要產生的檔案)和產生該檔案之相關的原始碼
檔案。
法則是說明如何根據相依性檔案,來建立目標項目。
make 命令利用 makefile,先決定依序建立哪些目標,再決定依序喚起哪些法則。
g++常用指令
-c 用來產生可以link的.o檔
-O2 某種optimize方法
-g 加入debug訊息 可用gdb看
-D define某巨集變數 讓code中的 #ifdef XXXX <code> #endif段程式碼成立 進入編譯
-L 加入library路徑
-l 加入archive後的library(.a檔) 要去掉檔名開頭的lib三個字元與最後的.a兩個字元
上面的文字中有一些是我自己加上的心得
如果有任何錯誤歡迎指正~
作者: anfranion (南‧生命的意義是經歷)   2012-03-06 11:47:00
-D說成是define 某個巨集變數會比較好:P這樣讓code中的 #ifdef XXXXX 就會成立~
作者: craig08 (小佑)   2012-03-06 14:34:00
感謝~
作者: Usoul   2012-03-06 18:35:00
推~ 第一次接觸或不熟悉 makefile 的人可以參考這篇文章

Links booklink

Contact Us: admin [ a t ] ucptt.com