2014年4月8日 星期二

[嵌入式系統]Makefile詳解

Reference from:http://www.linux.org.tw/CLDP/OLD/doc/makefile-ch1.html

第一章 - Makefile語法的基本規則:
1.”每一個命令列的開頭都要是一個tab字元(四個空格)”.
2.makefile會忽略描述檔中的空白行且亦會忽略掉#(註解)
3.設定make clean命令列
clean :
/bin/rm –f core *.o
意指強制移除.o的檔案
簡單範例第一步:cc -c main.c        編譯main.c程式
進階範例第二步:plot_prompt : basic.o prompt.o //宣告plot_prompt由basic.o與prompt.o兩個檔案組成
cc –o plot_prompt basic.o prompt.o
plot_win : basic.o window.o   //宣告plot_prompt由basic.o與window.o兩個檔案組成
cc –o plot_win basic.o window.o
basic.o : basic.c  //宣告basic.o由basic.c產生
cc –c basic.c
prompt.o : prompt.c  //宣告prompt.o由prompt.c產生  
cc –c prompt.c
window.o : window.c   
cc –c window.c

第二章 - (巨集與後置規則):
Reference:http://www.linux.org.tw/CLDP/OLD/doc/makefile-ch2.html
1.可用$(name) 或${name}定義巨集
2.描述檔中#代表巨集定義結束並開始註解
3.巨集名稱前不允許有tab字元且等號前也不能有冒號:
4.EXECS = ${SOURCES:.c=}  //sources的內容 去掉.c
5.$@  and  $?(未完成)
7.>>(未完成)

使用make時加上 –e 這個選項,這樣一來,就會把不同來源之巨集定義的優先權變成下面的順序,由最低到最高:(簡單來說就是-e忽略描述檔 ; 非-e就是忽略環境變數).

1.make內部的(default,內定的)已有的定義.

2.在描述檔裡頭的巨集定義.

3.目前的環境變數. 在Korn shell和Bourne shell裡頭,如果把巨集定義在make指令之前的話,此巨集相當於環境變數.

4.在使用make指令時,所定義的巨集,但是是位於make指令之後,相較於第2項,雖然同樣都是在


沒有留言:

張貼留言