Makefile:構(gòu)建自動化
我們可以用 make
命令行工具替代手動敲入 “編譯”、“鏈接”、“燒寫” 這些命令,自動完成整個過程。make
工具使用一個名為 Makefile
的配置文件,從中讀取執(zhí)行動作的指令。這種自動化方式非常棒,因為這樣可以把構(gòu)建固件的過程、使用了哪些編譯標(biāo)記等也文檔化。
在 https://makefiletutorial.com 上有一個非常好的給初學(xué)者的 Makefile 教程,強烈建議看一下。下面我將列出一些非常必要的概念以理解我們所使用的 Makefile。對于已經(jīng)很熟悉 make
的朋友,可以跳過這一部分。
(資料圖片)
其實 Makefile
的格式并不復(fù)雜:
action1:command ... # Comments cango after hash symbolcommand .... # IMPORTANT: command must be preceded with the TAB characteraction2:command ... # Don"t forget about TAB. Spaces won"t work!
現(xiàn)在我們可以跟動作名(也被稱作目標(biāo))一起調(diào)用 make
來執(zhí)行相應(yīng)的動作:
$ make action1
當(dāng)然,也可以在命令中定義和使用變量,動作也可以是需要創(chuàng)建的文件名:
firmware.elf:COMPILATION COMMAND .....
任何動作都可以有一個依賴列表。例如,firmware.elf
依賴源文件 main.c
,當(dāng) main.c
改變時,make build
就會重新構(gòu)建 firmware.elf
:
build: firmware.elffirmware.elf: main.cCOMPILATION COMMAND
我們已經(jīng)準(zhǔn)備好為固件編寫 Makefile
,定義一個 build
動作 / 目標(biāo):
CFLAGS ?= -W -Wall -Wextra -Werror -Wundef -Wshadow -Wdouble-promotion -Wformat-truncation -fno-common -Wconversion -g3 -Os -ffunction-sections -fdata-sections -I. -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 $(EXTRA_CFLAGS)LDFLAGS ?= -Tlink.ld -nostartfiles -nostdlib --specs nano.specs -lc -lgcc -Wl,--gc-sections -Wl,-Map=$@.mapSOURCES = main.cbuild: firmware.elffirmware.elf: $(SOURCES)arm-none-eabi-gcc $(SOURCES) $(CFLAGS) $(LDFLAGS) -o $@
在這里我們定義了一些編譯標(biāo)記。?=
表示這是默認值,我們可以在命令行中覆蓋它們,像這樣:
$ make build CFLAGS="-O2 ...."
上面的 Makefile
文件中定義了 CFLAGS
、LDFLAGS
、SOURCES
變量,然后我們告訴 make
,當(dāng)要 build
時創(chuàng)建 firmware.elf
文件,它依賴 main.c
文件,使用 arm-none-eabi-gcc
編譯器和給定的編譯標(biāo)記生成它。$@
特殊變量會被展開成動作 / 目標(biāo)名,在這個例子中是 firmware.elf
。
現(xiàn)在調(diào)用 make
試一下:
$ make buildarm-none-eabi-gcc main.c -W -Wall -Wextra -Werror -Wundef -Wshadow -Wdouble-promotion -Wformat-truncation -fno-common -Wconversion -g3 -Os -ffunction-sections -fdata-sections -I. -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Tlink.ld -nostartfiles -nostdlib --specs nano.specs -lc -lgcc -Wl,--gc-sections -Wl,-Map=firmware.elf.map -o firmware.elf
如果我們再次運行:
$ make buildmake: Nothing to be done for `build".
make
會檢查 firmware.elf
和依賴項 main.c
的修改時間,如果是它們是最新的,則什么都不做。如果我們修改下 main.c
,則會重新構(gòu)建:
$ touch main.c # Simulate changes in main.c$ make build
現(xiàn)在,還剩下 “燒寫” 這個動作 / 目標(biāo):
firmware.bin: firmware.elfarm-none-eabi-objcopy -O binary $< $@flash: firmware.binst-flash --reset write $(TARGET).bin 0x8000000
OK,現(xiàn)在從終端中執(zhí)行命令 make flash
就會創(chuàng)建 firmware.bin
文件,然后通過 st-link
燒入板子。當(dāng) main.c
改變時,這個命令也會重新構(gòu)建,因為 firmware.bin
依賴 firmware.elf
,firmware.elf
又依賴 main.c
。所以我們的開發(fā)循環(huán)就是這樣的兩步:
# Develop code in main.c$ make flash
還有一個良好實踐就是在 Makefile
中添加 clean
動作,以刪除構(gòu)建生成的文件:
clean:rm -rffirmware.*

-
1怎么打開電腦路由器設(shè)置?初次設(shè)置無線路由器方法是什么?
-
2路由器如何設(shè)置提升網(wǎng)速?學(xué)校寢室路由器無線怎么設(shè)置的?
-
3電腦沒連路由器卻能進入路由器界面?電腦無法進入路由器?
-
4把電腦變成無線路由器怎么弄?臺式電腦如何變成無線路由器?
-
5重新啟用U盤的技巧有什么?U盤提速的技巧有哪些?
-
6如何安全的使用U盤?U盤日常使用的技巧有哪些?
-
7曲面顯示器怎么選擇?曲面顯示器和平面顯示器的區(qū)別有什么?
-
8安卓設(shè)備型號和名稱可以改嗎?安卓手機如何修改手機IMEI串號?
-
9地址和域名是什么關(guān)系?互聯(lián)網(wǎng)域名是商標(biāo)的一個組成部分對錯?
-
10Linux獲取文件名稱和文件路徑并寫入txt?linux下exports文件是什么?
-
釣魚法則的內(nèi)容有什么? 釣魚法則的來源是如何的呢?
-
電話放棄率指的是誰? 電話放棄率的作用體現(xiàn)出了什么?
-
低碳營銷的組合有哪些內(nèi)容? 低碳營銷的主張什么?
-
公募基金為何此時選擇降費?|天天速看料
-
世界實時:達利食品開盤漲近32% 獲創(chuàng)辦人許世輝溢價約37.87%提私有化
-
什么是定位咨詢? 定位咨詢的內(nèi)容有哪些?
-
曝!女留學(xué)生孕期出軌導(dǎo)致流產(chǎn),不雅照片被曝光,內(nèi)容不堪入目 天天觀熱點
-
極端高溫天氣為何反復(fù)出現(xiàn)?專家用“骰子”打了個比方
-
環(huán)球報道:中國能建承建的安徽阜陽南部120萬千瓦風(fēng)光儲基地配套儲能電站并網(wǎng)投運
-
5天收費5980?高價研學(xué)不“研”也不“學(xué)”?教育部集中整治“問題研學(xué)”-新消息
-
北京:加緊布局人形機器人 推進產(chǎn)業(yè)關(guān)鍵核心技術(shù)攻關(guān)-每日熱點
-
龍家勝任黔東南州人民政府副州長
-
焦點!仁懷市人大常委會任免兩名副市長
-
世界快看:“青春遇見貴州·感受多彩魅力”全國青少年赴黔研學(xué)旅行推介活動北京分會場活動舉行
-
日本逮捕一名中國籍研究員,我駐日使館回應(yīng)-世界快看
-
多數(shù)謬誤的原因包括哪些? 多數(shù)謬誤的策略有什么?
-
我國在建最北高鐵!哈伊高鐵首座站房主體結(jié)構(gòu)封頂_今日熱訊
-
微信“文件傳輸助手”是真人?回應(yīng)來了
-
地點效用表明什么含意? 地點效用的獲得形式有哪些?
-
淚崩!六七歲女孩偷跑上山,在爸爸墳前認真讀書_焦點快播
-
北京:下午3點前大部地區(qū)還有雷雨,明天高溫或達39℃ 全球獨家
-
多元導(dǎo)向蘊含什么內(nèi)容? 多元導(dǎo)向的優(yōu)缺點有哪些內(nèi)容?
-
全球熱議:我的電腦圖標(biāo)不見了怎么恢復(fù)原狀 我的電腦圖標(biāo)不見了怎么恢復(fù)原狀呢
-
北京宜家家居因未配備安管人員等被行政處罰-全球速訊
-
什么是單品管理? 單品管理的作用體現(xiàn)在哪里?
-
時訊:“揚帆啟航·共繪黔程”貴州研究生會2023年畢業(yè)生交流會在北京舉行
-
今天至明天白天湖南晴熱為主 明晚湘北雨水“光顧”
-
次級商圈指的是什么? 次級商圈的特點有什么內(nèi)容?
-
SMM快訊
-
焦點滾動:總有一款是你愛的!坐著高鐵來貴州“逛吃逛吃”~
-
促銷折讓表示的是什么意思? 促銷折讓的內(nèi)涵是怎么樣的?
-
零鋪紀(jì)休閑零食加盟店,成功經(jīng)驗可以輕松復(fù)制
-
什么是創(chuàng)意環(huán)境? 創(chuàng)意環(huán)境的特點包括什么?
-
世界新消息丨一圖讀懂丨第三屆中非經(jīng)貿(mào)博覽會精彩搶先看
-
市場營銷規(guī)律的主要內(nèi)容有哪些? 市場營銷規(guī)律的主要特點是如何的呢?
-
促銷管理的步驟具體是怎么樣的? 促銷管理的活動是如何的呢?
-
當(dāng)前時訊:魯泰A(000726.SZ):人民幣貶值對公司有一定的正向影響
-
瑞典衛(wèi)生用品公司愛適瑞將出售俄羅斯業(yè)務(wù),已獲俄當(dāng)局批準(zhǔn)、預(yù)計二季度完成
-
天天熱點評!木工被電鋸割斷手指,晚高峰中北京交警協(xié)力救助快速送達醫(yī)院
-
快訊:江蘇一公司發(fā)生火情 現(xiàn)場救援仍在繼續(xù)
-
速讀:成都人才公寓先租后售放棄后還有人才資格嗎
-
環(huán)球簡訊:關(guān)注2023明文化論壇丨一篇游記寫明朝昌平秀麗,楷書之美再現(xiàn)經(jīng)典之作
-
天天即時:帶病投保的百萬醫(yī)療險有哪些?這些值得收藏
-
長株潭城際軌道交通西環(huán)線一期于今日13時18分開通載客初期運營
-
北京解除大風(fēng)藍色預(yù)警信號
-
門頭溝區(qū)與西城區(qū)簽署結(jié)對協(xié)作框架協(xié)議-當(dāng)前看點
-
世界新動態(tài):中央氣象臺發(fā)布暴雨強對流雙預(yù)警,貴州西北部有短時強降雨
-
故意駕車沖撞行人造成多人傷亡,溫慶運二審維持原判被判死刑|世界信息
-
蘇州園區(qū)山姆啟動跨境電商新零售業(yè)務(wù)
-
看點:7月1日起,鐵路實行新的列車運行圖,渝貴線這些變化請關(guān)注
-
蘇州工業(yè)園區(qū)稅務(wù)局:稅費服務(wù)“心”體驗 利企便民零距離
-
擁有100萬存款是什么概念?我國存款達到100萬的人多嗎?答
-
寶貝你能做我媽嗎[娛樂圈]_關(guān)于寶貝你能做我媽嗎[娛樂圈]介紹 每日資訊
-
B站怎么辦?B站未來往哪里去?陳睿問,陳睿答 今亮點
-
記者:7月3日深圳隊主場改在寶安體育場,是為給五月天演唱會讓路 即時焦點
-
有渠道改高考分?小心上當(dāng)受騙!_天天觀察
-
當(dāng)前快看:內(nèi)蒙古阿巴嘎旗發(fā)現(xiàn)大型古墓葬群及石人像
-
《勇者斗惡龍12》開發(fā)有難度:面向成年人的作品+遠程辦公
-
開電動汽車 還能更丟人嗎?
-
天天微頭條丨北京市“兩區(qū)”展示會客廳里竟藏著一處遺址!它的故事不一般
-
北京大柵欄街道黨群服務(wù)中心啟用
-
訊息:美國2024年總統(tǒng)大選競爭加劇,特朗普民調(diào)支持率超拜登
-
好醫(yī)保和太平洋百萬醫(yī)療險哪個好?從三個方面來看 天天熱訊
-
當(dāng)前焦點!2023良心百萬醫(yī)療險,哪些產(chǎn)品值得買?
-
今日熱聞!北京南部又來一波降雨云團,預(yù)計全市雷陣雨將持續(xù)至17時
-
7月1日至8月31日 寶雞市圖書館暑期延時開放_環(huán)球熱門
-
觀天下!日本警方逮捕一名中國籍研究員,我駐日使館:已表達嚴(yán)重關(guān)切
-
【環(huán)球時快訊】總占地188.5畝!咸陽兩寺渡或建保障房項目
-
絕對免賠額0元每次什么意思?-時訊
-
寶藏女孩何泓姍、美女主持梁田帶你體驗《沖呀!下班了》
-
湖南科技職業(yè)學(xué)院原院長楊棟梁被查
-
順發(fā)恒業(yè)(000631.SZ):公司對風(fēng)電的管理一直秉持“抓住每一米風(fēng)”的原則-全球報道
-
當(dāng)前報道:緬懷錢三強!15名“兩彈一星”元勛由他動員回國
-
現(xiàn)場報道|緣聚津城 舞動絲路——經(jīng)典舞劇《絲路花雨》在津傾情獻演
-
傳統(tǒng)商務(wù)概述是如何描述的? 傳統(tǒng)商務(wù)的交易流程具體怎么樣的?
-
水性聚氨酯防腐地坪:陳遵厚先生的專利創(chuàng)新,為行業(yè)帶來變革
-
什么是成交后跟蹤? 成交后跟蹤的意義包括哪些?
-
環(huán)球快資訊:飲水思源繼往開來 十三陵水庫建庫65周年系列活動舉辦
-
多地新一輪降雨持續(xù)“派貨” 華北等地明日高溫重“燃” 全國天氣速覽→ 環(huán)球熱門
-
補差價的方式具體是怎么樣的呢的? 補差價的優(yōu)劣表現(xiàn)出什么?
-
什么是保健品營銷? 保健品營銷特點有什么?
-
便利交換功能表示什么? 便利交換職能的內(nèi)容包括哪些?
-
當(dāng)前要聞:我的世界怎么做槍 我的世界怎么做槍械模組
-
吞噬星空停更什么時候恢復(fù)(吞噬星空暫時停更)-重點聚焦
-
不規(guī)則需求指的是什么? 不規(guī)則需求的營銷策略有哪些內(nèi)容?
-
長城坦克CEO:越野車宣傳原地打轉(zhuǎn)、水上漂是打擦邊球 揣著明白裝糊涂-播資訊
-
特許經(jīng)營對被特許者的劣勢有什么? 被特許者失敗的主要原因有什么內(nèi)容?
-
被特許者的義務(wù)有哪些內(nèi)容? 特許經(jīng)營對被特許者的優(yōu)勢包括什么?
-
不正當(dāng)競爭的特征有哪些? 不正當(dāng)競爭的做法分別是什么?
-
邊際利潤的計算公式具體是怎么樣的? 邊際利潤的運用體現(xiàn)在哪里?
-
一“案”未平一“案”又起!珠海冠宇再陷專利訴訟,拆解紛爭硝煙難止背后
-
回溯記憶有蘊含什么內(nèi)容? 回溯記憶與前瞻記憶的關(guān)系是怎么樣的?
-
Unity 推出面向開發(fā)者的 AI 軟件市場 AI Hub,股價飆漲 15%-每日焦點
-
海南華僑中學(xué)貼吧_海南華僑中學(xué)校歌
-
當(dāng)前觀點:資助近200萬元!廣州市慈善會資助3地15個鄉(xiāng)村振興慈善項目
-
工作狂的原因有哪些? 如何治療工作狂?
-
6月27日LME基本金屬注銷倉單 世界消息
-
會社人間表示的是什么? 會社人間的來源及發(fā)展是怎么樣的呢?
-
北京東六環(huán)改造工程西線隧道貫通
-
會議質(zhì)量表示的是什么意思? 會議質(zhì)量的主要決定因素有哪些?