close

一個專案一個原始檔?

剛開始寫程式,常會參考網路的範例,或是學校教授上課,電腦書的例題,大半全部程式就是一個檔案。久了以後,大家也普遍認為一個專案,由一個程式全部完成,是一件很正常的事。

但如果把目光放遠,到網路下載一些開放源碼專案的原始檔(SDCC這個C51編譯器),當會發現多數較具分量的專案,幾乎都是由多個原始檔案構成的。

單一檔案的編譯動作單純,可在DOS視窗的命令行上輸入:SDCC main.c 即可,顯然超過一個檔案的專案無法用這種方式處理,業界對於複數檔案的專案,通常會寫一個類似以下的makefile檔案,用來管理專案的編譯動作。

SDCCCFLAGS = --model-small

ASLINKFLAGS = --code-loc 0x20 --data-loc 0x30 --xram-loc 0x00

%.rel : %.a51

sdas8051 -l -o -s $^

main.hex : main.c begin.rel 

sdcc $(SDCCCFLAGS) $(ASLINKFLAGS) $^
packihx main.ihx > main.hex
del -f *.asm *.rst *.sym

複數檔案專案的管理

Makefile檔案的作用,主要在管理專案的執行,以目前的專案為例,專案中有兩個原始碼檔案,一個是C原始程式碼,由SDCC負責編譯,另一個檔案為BEGIN.A51,是一組合語言原始程式碼,編譯程式則為SDAS8051,兩個不同屬性的原始檔購成一個專案。Makefile用來安排什麼時候用什麼編譯器,使用編譯器時要輸入什麼編譯參數。在目前的makefile,於sdcc編譯時,須要輸入的參數為:

SDCCCFLAGS = --model-small

ASLINKFLAGS = --code-loc 0x20 --data-loc 0x30 --xram-loc 0x00

Makefile的作用不只是讓使用者減少鍵盤上的指令輸入,還有管理的作用,比如專案中的BRGIN.A51先前已經編譯過了,但main.c則剛經過修改,須要重新編譯和聯結,此時makefile就可以發揮作用,以減少程式編譯所須要的工作和時間。

此類makefile,有一個專有名詞叫作script(劇本),專案該包括那幾個檔案,該如何編譯,劇本中都會詳加說明。Makefile只是一個簡單的文字檔,有專有的程式讀取makefile,然後按makefile中的說明,處理複雜的編譯動作。

很多傳統程式開發系統都有自己的劇本處理程式,像微軟就有一個imake.exe,作者所用的則是著名GNU所開發的make.exe,此類程式功能和原理都差不多,想了解此類程式的用法,網路上很容易就可以搜尋和下載。

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 單晶片玩人 的頭像
    單晶片玩人

    單晶片玩人(uPplayer)的部落格

    單晶片玩人 發表在 痞客邦 留言(0) 人氣()