3 Makefile 變量和變量賦值 變量可以對許多地方使用, 比如目標, 依賴。 或者命令。 變量的賦值可以使用: “ = ” “ ? = ” “ := ” “ += ” 變量的使用: 通過$() 來完成變量的引用。 示例 1: 使用 “: = ” 來賦值 ![]() 使用“ : =” 給變量賦值, 是立刻賦值, 在執行 var: =aaa 的同時變量值已經被確定了, 所以最后打印為 aaabbb, 而不是 cccbbb, 如下圖所示。 ![]() 示例 2: 使用“=” 賦值 ![]() 使用“=” 來賦值, 是延遲賦值, 使用它來賦值是 makefile 里面最后被指定的值。 因為我們最后給變量var1 賦值為 ccc ,所以最后打印為 cccbbb , 而不是 aaabbb , 如下圖所示: ![]() 示例 3: 使用 “? =” 來賦值 ![]() 使用“?=” 來賦值, 如果 var1 變量前面沒有被賦值, 那么就給它賦值為 ccc , 如果前面已經賦值了,就適應前面的值, 所以, 打印為 aaabbb ,而不是 cccbbb , 如下圖所示。 ![]() 然后我們注釋掉第一行代碼, makefile 中的注釋為 # ![]() 在運行就會打印 cccbbb ,因為前面沒有給 var1 變量賦值。 如下圖所示 ![]() 示例 4 : 使用“+=” 來賦值 ![]() 使用“+=” 賦值是追加賦值, 是在我們前面定義的好的字符串里面在添加進去新的字符串, 所以運行會打印 aaa bbbccc 。 不過中間會有空格, 如下圖所示: ![]() 使用“+=” 也類似于我們這樣賦值, 如下圖所示: ![]() 如果賦值很長, 我們也可以使用換行符“\” , 如下圖所示 ![]() 自動化變量就是不用定義且會隨著上下程序的不同而發生變化的變量叫做自動化變量。 這里介紹三個最常用的自動化變量:
在了解這三個自動化變量之前, 我們先來寫一個程序: 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:支持 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個 溫度傳感器:支持 風扇驅動:支持 |