1. 程式人生 > 其它 >迅為龍芯2K1000開發板Linux之Makefile基本語法(上)

迅為龍芯2K1000開發板Linux之Makefile基本語法(上)

3 Makefile變數和變數賦值

變數可以對許多地方使用,比如目標, 依賴。 或者命令。
變數的賦值可以使用:“ = ” “ ? = ” “ := ” “ += ”
變數的使用:通過$() 來完成變數的引用。
示例1
使用“: = ” 來賦值 <ignore_js_op> 使用“ : =” 給變數賦值, 是立刻賦值, 在執行 var=aaa的同時變數值已經被確定了,所以最後列印為 aaabbb而不是 cccbbb如下圖所示。 <ignore_js_op> 示例2
使用“=” 賦值 <ignore_js_op> 使用“=” 來賦值, 是延遲賦值, 使用它來賦值是 makefile裡面最後被指定的值。
因為我們最後給變數var1賦值為ccc ,所以最後列印為cccbbb而不是 aaabbb如下圖所示: <ignore_js_op> 示例3:
使用“? =” 來賦值 <ignore_js_op> 使用“?=” 來賦值, 如果 var1變數前面沒有被賦值,那麼就給它賦值為 ccc如果前面已經賦值了,就適應前面的值, 所以, 列印為 aaabbb ,而不是cccbbb如下圖所示。 <ignore_js_op> 然後我們註釋掉第一行程式碼,makefile中的註釋為# <ignore_js_op> 在執行就會列印cccbbb ,因為前面沒有給var1變數賦值。
如下圖所示 <ignore_js_op> 示例4 使用“+=” 來賦值 <ignore_js_op> 使用“+=” 賦值是追加賦值, 是在我們前面定義的好的字串裡面在新增進去新的字串, 所以執行會列印 aaa bbbccc不過中間會有空格, 如下圖所示: <ignore_js_op> 使用“+=” 也類似於我們這樣賦值, 如下圖所示: <ignore_js_op> 如果賦值很長,我們也可以使用換行符“\” , 如下圖所示 <ignore_js_op>

4Makefile自動化變數

自動化變數就是不用定義且會隨著上下程式的不同而發生變化的變數叫做自動化變數。 這裡介紹三個最常用的自動化變數:
$@
表示所有目標
$< 表示第一個依賴檔案,如果依賴模式是%那麼它就表示一系列檔案。(%為萬用字元,類似linux上的*
$^ 表示所有依賴
在瞭解這三個自動化變數之前,我們先來寫一個程式:
main.c程式碼如下 <ignore_js_op> hello.c程式碼如下: <ignore_js_op> hello.h 程式碼如下: <ignore_js_op> Makefile程式碼如下: <ignore_js_op> 使用這個makefile雖然也可以成功編譯,但是, 一旦編譯的檔案多了, 如果我們還這樣來編寫 makefile就會變得非常複雜。所以, 自動化變數就派上用場啦。接下來我們一步一步的來簡化這個 makefile 。 簡化一:用變量表示依賴檔案 <ignore_js_op> 後面如果我們在增加依賴檔案的話,我們直接在變數 var 後面增加就可以了。
簡化二:
使用萬用字元%和自動化變數 $<$@代替依賴和目標,簡化完如下圖所示: <ignore_js_op> 簡化三:
使用自動化變數“$^” 表示所有檔案依賴的列表, 簡化完如下圖所示: <ignore_js_op> 迅為龍芯2K1000開發板: <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> 核心板引數: 尺寸:65mm*55mm CPU :龍芯2K1000雙核工業級處理器 主頻:800MHz-1GHz 記憶體:板載2GB DDR3 ,可選4GB 儲存:8MB的儲存,用來放BOOT載入程式的 工作電壓:12V和5V 系統支援:流暢執行vusybx、buiroot、Loognix、QT5.12系統。 引角擴充套件:引出腳多達232個,1.0間距的郵票孔方式,滿足使用者各類擴充套件需求 底板引數: 尺寸:190mm*125mm POWER:電直流電源輸入介面 SWITCH:電源開關 Ethernet:2 路10M/100M/1000M自適應乙太網 USBHOST:4路USB2.0 OTG:支援 MiniHDMI:支援 RGB-LCD:支援 WIFI/BT:板載WIFI、藍芽二合一模組 Mini PCIE:可外接mini PCIE介面的4G模組,具備PCIE2.0單通道 4G模組 :支援(選配) SIM Card:1個 UART:2路串列埠 RS485:1路 CAN:2路 蜂鳴器:一個有源蜂鳴器 RTC:支援 LIO/UART:2mm間距20PIN插座引出 GPIO :2mm間距20PIN插座引出 耳機介面:標準3.5mm耳機介面 JTAG:1路JTAG除錯介面(2mm間距10PIN插座引出) GPS:一路GPS(選配) 固態硬碟介面:1路(SATA固態盤選配) 按鍵:3個 溫度感測器:支援 風扇驅動:支援