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

3 Makefile 變量和變量賦值

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

Makefile 自動化變量

自動化變量就是不用定義且會隨着上下程序的不同而發生變化的變量叫做自動化變量。
這裏介紹三個最常用的自動化變量:
$@
表示所有目標
$<
表示第一個依賴文件, 如果依賴模式是%, 那麼它就表示一系列文件。(%爲通配符, 類似 linux上的 *)
$^
表示所有依賴
在瞭解這三個自動化變量之前, 我們先來寫一個程序:
main.c代碼如下
hello.c代碼如下:
hello.h 代碼如下:
Makefile代碼如下:
使用這個 makefile 雖然也可以成功編譯, 但是, 一旦編譯的文件多了, 如果我們還這樣來編寫 makefile就會變得非常複雜。 所以, 自動化變量就派上用場啦。接下來我們一步一步的來簡化這個 makefile 。
簡化一: 用變量表示依賴文件
後面如果我們在增加依賴文件的話, 我們直接在變量 var 後面增加就可以了。
簡化二:
使用通配符 % , 和自動化變量 $< 、 $@ 代替依賴和目標, 簡化完如下圖所示:
簡化三:
使用自動化變量 “$^” 表示所有文件依賴的列表, 簡化完如下圖所示:
迅爲龍芯2K1000開發板:
核心板參數:
尺寸: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自適應以太網
USB HOST:4路USB2.0
OTG:支持
Mini HDMI:支持
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個
溫度傳感器:支持
風扇驅動:支持
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章