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