Makefile步步為營 本目錄主要包含Makefile一步步遞進學習的示例代碼 makefile代碼實例:https://www.lanzous.com/i9m9npi step0:Makefile小實驗 進行Makefile小實驗,體驗Makefile的功能。 目錄中的 是不嚴謹的編寫方式。 目 ...
Makefile步步為營
本目錄主要包含Makefile一步步遞進學習的示例代碼
makefile代碼實例:https://www.lanzous.com/i9m9npi
step0:Makefile小實驗
進行Makefile小實驗,體驗Makefile的功能。
目錄中的Makefile
是不嚴謹的編寫方式。
目錄中的Makefile_PHONY
是嚴謹的編寫方式。
make實驗
切換至step0目錄下,即Makefile所在的同級目錄,使用如下命令實驗:
#在主機上Makefile所在的目錄執行如下命令
#查看當前目錄的內容
ls
#執行make命令,make會在當前目錄下搜索“Makefile”或“makefile”,並執行
make
#可看到make命令後的輸出,它執行了Makefile中編寫的命令
#查看執行make命令後的目錄內容,多了test.txt文件
ls
#執行Makefile的targetd目標,並查看,少了test.txt文件
make targetd
ls
#執行Makefile的targetb目標,並查看,又生成了test.txt文件
make targetb
ls
#執行Makefile的targetc目標
make targetc
make使用-f
參數可以指定使用其它文件。
#通過-f選項指定make使用的Makefile文件
make -f Makefile_PHONY
#本示例中其它操作與Makefile功能相同
step1:使用Makefile編譯程式
使用Makefile編譯Hello示常式序。
編譯
編譯的輸出為hello_main
文件
切換至step1目錄下,即Makefile所在的同級目錄,使用如下命令編譯:
#後編譯
make
運行
編譯後使用如下命令運行:
./hello_main
step2:使用Makefile預設編譯規則
使用Makefile編譯Hello示常式序,Makefile中使用o文件依賴
編譯及運行
本實驗編譯及運行操作與step1相同,切換至step2目錄操作即可。
step3:使用變數
使用Makefile編譯Hello示常式序,Makefile中使用變數
編譯及運行
本實驗編譯及運行操作與step1相同,切換至step3目錄操作即可。
Makefile_test實驗
Makefile_test文件用於變數賦值實驗測試,可執行如下命令實驗:
make -f Makefile
#實驗輸出為Makefile中各個變數的值
step4:使用變數及分支
使用Makefile編譯Hello示常式序,Makefile中使用變數定義最終目標,並使用分支支持不同的架構
x86架構編譯及運行
切換至step4目錄下,即Makefile所在的同級目錄,使用如下命令編譯:
#先清理,否則可能因為*.o文件架構不同而出錯
make clean
#後編譯
make
編譯後使用如下命令運行:
./hello_main
ARM架構編譯及運行
切換至step4目錄下,即Makefile所在的同級目錄,使用如下命令編譯:
#先清理,否則可能因為*.o文件架構不同而出錯
make clean
#後編譯
make ARCH=arm
編譯後使用如下命令運行:
./hello_main
step5:使用函數
使用Makefile編譯Hello示常式序,Makefile中使用函數,並支持層級目錄。
x86架構編譯及運行
切換至step5目錄下,即Makefile所在的同級目錄,使用如下命令編譯:
make
編譯的輸出目錄為bulid_x86
編譯後使用如下命令運行:
.bulid_x86/hello_main
ARM架構編譯及運行
切換至step5目錄下,即Makefile所在的同級目錄,使用如下命令編譯:
make ARCH=arm
編譯的輸出目錄為bulid_arm
編譯後使用如下命令運行:
.bulid_arm/hello_main
清理文件
若要清理文件,也要指定架構
- 清理x86的編譯輸出,預設架構為x86,直接make clean即可:
make clean
- 清理arm的編譯輸出,需要使用ARCH=arm指定:
make clean ARCH=arm
- 清理所有的編譯輸出,可以直接使用cleanall目標:
make cleanall