makefile不僅僅是一個命令的集合體,其中有一些規(guī)則是需要理解掌握的。
首先,了解makefile的規(guī)則:
//-----------格式----------
目標 : 依賴1,依賴2
(TAP鍵)命令
//-------------------------
1、目標,就是我們想生成的文件。
2、依賴往往是我們已經(jīng)有的文件,是生成目標的必要條件。
3、命令就是利用依賴來產(chǎn)生目標。
命令不是任何情況都可以執(zhí)行的,它是有條件的:
1、目標不存在 or 2、依賴已更新(首先依賴是存在的)。
牛刀小試:
1、編譯和鏈接放一塊了:
hello: hello.c a.c
gcc -o hello hello.c a.c
hello是目標,命令執(zhí)行后會被生成。hello可通過“.hello”執(zhí)行。
gcc 可以理解為是linux中的一個軟件,而 -o 就是軟件中的一個按鍵(選項),hello.c a.c就是已經(jīng)添加的模塊文件。
這就是命令,就像是你在windows里打開一個軟件,添加文件,然后按下編譯按鈕。命令就是這么一回事。
2、編譯和鏈接分開:
過程分析:首先目標hello 依賴于 hello.o 和 a.o
結果這兩個依賴不存在,那么向下找目標。
發(fā)現(xiàn)目標hello.o,依賴于hello.c(這個是存在的)。滿足目標不存在
那么執(zhí)行命令 gcc -o hello -c hello.c//表示編譯hello.c輸出hello.o但不鏈接。
下邊的同理。。。。。。。
現(xiàn)在兩個.o文件都有了,那么這條命令可以執(zhí)行了:
gcc -o hello hello.o a.o//鏈接這兩個文件,輸出hello可執(zhí)行文件。
這樣的好處是:
利用規(guī)則:1、目標不存在。or 2、依賴已更新(首先依賴是存在的)。
可以不編譯,沒有修改的文件,從而節(jié)省編譯時間。
最后,還可以簡寫:
分析下:
$@ 表示的是目標(的集合);
$^ 表示的是依賴(的集合);
%.o 表示所有的.o文件
%.c 表示所有的.c文件
$< 表示(目標:后面列表里)第一個依賴!
這里提一點:
1、當我們執(zhí)行make的時候,我們的目的是,參數(shù)該文件的第一個目標,就是hello。所以clean 下的命令并不會執(zhí)行。
2、clean是一個虛擬的目標,并沒有依賴項。我們可以通過 make clean 這個命令去執(zhí)行它下邊這個命令(清楚掉所有的.o文件)
再來看一個復雜一點的:
第一行是什么,意思目前我也不知道,可以把它看成是一個函數(shù),makefile中調用函數(shù)的方式就是”$( ) ”
arm-linux-gcc 就是linux的中的另一個軟件了——交叉編譯器。
何為,交叉編譯?就是在一個平臺編譯,生成一個可以在另一個平臺運行的文件。
具體看看這句:
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S
看著“-c -o crt0.o crt0.S”這條命令的順序,你是否感覺奇怪?
如果,你把-c -o 理解成兩個按鍵,感覺可能好很多。
之所以這么隨意的順序,去寫,是因為這些選項往往有一個特性,就是忽略掉后面自己不需要的文件。
這段makefile以后還會具體分析,今天就到這里~~
上一篇:arm學習之匯編跳轉指令總結
下一篇:【arm學習】我的第一個裸板程序
推薦閱讀最新更新時間:2025-04-17 15:06

設計資源 培訓 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設備數(shù)驅動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- LT1767EMS8E-1.8 12V 至 3.3V 降壓轉換器的典型應用電路
- EVAL-AD7927CB,用于測試 AD7927、12 位、200KSPS、8CH ADC 儀表的評估板
- MCP4XXXDM-DB,MCP41100 數(shù)字電位器子板評估套件
- LTC2256-14 演示板,14 位,25Msps ADC,CMOS 輸出,5-170MHz
- Cree XLamp CXA2540 LED 零售軌道燈參考設計
- LT3971EMSE 演示板、38V、1.2A、2MHz 降壓型開關穩(wěn)壓器
- 便攜氣泵 ESP32 CS1237 Nokia_5110
- 【航順訓練營】HK最小系統(tǒng)開發(fā)板+682624A
- LTC4219 5A 集成熱插拔控制器的典型應用
- MC34717、5A、1MHz 全集成雙開關模式電源的簡化應用圖
- 車載以太網(wǎng)-SOME/IP簡介
- 圓柱電池市場“洗牌”醞釀,場景爭奪戰(zhàn)打響
- 4月15日德州儀器攜手庫卡發(fā)布新一代工業(yè)機器人控制器,定義安全與效率新標桿
- 大眾汽車集團在中國推出全新AI驅動ADAS系統(tǒng) 面向下一代智能電動汽車
- 納微電半導體推出最新SiCPAK?電源模塊
- “鈉新”、“驍遙雙核”……寧德時代開啟多核時代
- 地平線發(fā)布HSD「全家桶」,城市NOA戰(zhàn)局迎來「新變量」
- 地平線輔助駕駛系統(tǒng)發(fā)布:軟硬一體
- TrendForce:預計中國市場2025年人形機器人本體產(chǎn)值將超過45億人民幣
- 全面擁抱人工智能 上海交大發(fā)布“AI十條”