嵌入式杂谈之makefile补充
我看了下自己的文章庫存,好像還沒有一篇關于Makefile的文章,所以這篇剛好可以彌補自己的缺失。
makefile預定義變量
預定義變量即系統自帶的變量
| AR | 庫文件維護程序的名稱,默認為ar | 
| AS | 匯編程序的名稱,默認為as | 
| CC | c編譯器的名稱,默認為cc | 
| CXX | c++編譯器的名稱,默認為g++ | 
| ARFLAGS | 庫文件維護程序選項,無默認值 | 
| ASFLAGS | 匯編程序選項,無默認值 | 
| CFLAGS | c編譯器選項,無默認值 | 
| CXXFLAGS | c++編譯器選項,無默認值 | 
makefile自動變量
| $* | 不包含擴展名的目標文件名稱 | 
| $< | 第一個依賴文件名稱 | 
| $? | 所有時間戳比目標文件晚的依賴文件 | 
| $@ | 目標文件的完整名稱 | 
| $^ | 所有不重復的依賴文件 | 
最下面兩個常用
makefile隱式規則
自動尋找.o文件對應的同名.c文件
不用指定生成.o文件的規則
相當于指定.o文件以后,會自動將同名.c文件進行編譯
這在uboot以及linux kernel中是非常常見的
在uboot以及linux kernel中經常出現include ···config.mk
這也相當于包含一個子makefile,雖然文件名不像,但可以把它當作一個makefile文件來看待,二者基本沒有區別
引用其他makefile及makefile嵌套
包含:
include makefile文件名
相當于子makefile文件直接展開
嵌套:
subsystem:
cd subdir && $(MAKE)
等價于:
subsystem:
$(MAKE) -C subdir
上面兩種寫法效果相同
makefile管理命令
| -C dir | 讀入指定目錄下面的makefile | 
| -f file | 讀入當前目錄下的file文件為nakefile | 
| -i | 忽略所有命令執行錯誤 | 
| -I dir | 指定被包含的makefile所在目錄 | 
源文件過多的編譯方案
makefile分開多文件或者分級
output文件不止一個文件解決方案
多個makefile文件,互相嵌套
使用偽目標 make all
makefile環境變量
普通變量導出以后即為環境變量
一般要求環境變量大寫,普通變量小寫
使用export 變量名進行導出
使用環境變量 環境變量類似于工程中所有makefile之間共享的全局變量
定義一個環境變量會影響到工程中的其他makefile文件,因此小心使用
普通變量只在當前文件起作用
makefile本身自帶的環境變量 例如上面提到的預定義變量
執行make命令的傳參操作也相當于傳入了一個環境變量(優先級最高,可以覆蓋原來makefile文件中定義的變量值)
makefile通配符
| * | 若干個任意字符 | 
| ? | 一個任意字符 | 
| [] | 將中括號中字符依次進行匹配,不加空格 | 
%表示任意字符,與*相似,但%一般只用于規則描述中,所以又稱為規則通配符
===========
??
PS:想加入技術群的同學,加了我好友后,就給我發「籃球的大肚子」這句話,有可能機器人打瞌睡,可以多發幾次,不要發與技術無關的消息或者推廣。
如果想獲取學習資料,就在公眾號后臺回復「1024」,足夠多的學習資料可以讓你學習。
總結
以上是生活随笔為你收集整理的嵌入式杂谈之makefile补充的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 数据分析-回归-案例-波士顿房价数据集
- 下一篇: of_property_read_str
