新手入门makefile教程
生活随笔
收集整理的這篇文章主要介紹了
新手入门makefile教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么使用makefile
我們在linux下進行編程時,通常使用的是gcc編譯器,這種情況下我們通常要去手寫編譯命令,如:gcc a.c b.c -o app。這雖然看上去很簡單,但在實際開發中,往往需要編譯的文件有很多,甚至還要去鏈接一些動態庫等等,我們不可能每次都去寫一長串的命令。為了方便管理,makefile就誕生了,它可以使用一些簡單的規則,來幫助我們構建編譯命令,十分方便。
makefile中的規則
以 gcc a.c b.c -o app為例,將其寫成規則,分為三個部分:目標、依賴和命令。下面是五個版本的makefile寫法。
第一版
app:a.c b.c #app是目標,a.c和b.c是依賴gcc a.c b.c -o app上述寫法效率太低,修改一個文件,其他文件也需修改。
第二版
app:a.o b.ogcc a.o b.o -o app a.o:a.cgcc a.c b.o:b.cgcc b.c只修改一個源文件如a.c,則make只執行gcc a.c和gcc a.o b.o -o app兩條命令,不再執行gcc b.c。
第三版
obj=a.o b.o #聲明變量 target=app #聲明變量 $(target):$(obj) #$用于變量取值gcc $(obj) -o $(target) %.o:%.cgcc -c $< -o $@ # $@:規則中的目標 # $<:規則中的第一個依賴 # $^:規則中的所有依賴 # 上述符號只能在命令中使用上述寫法的可移植性依然很差。
第四版
src=$(wildcard ./*.c) #查找指定目錄下的.c文件 obj=$(patsubst %.c, %.o, $(src)) #匹配替換,如將src中的a.c替換成a.o,b.c替換成b.o target=app $(target):$(obj)gcc $(obj) -o $(target) %.o:%.cgcc -c $< -o $@上述寫法的缺點是不能自動清理項目。
第五版
添加清理項目的規則
src=$(wildcard ./*.c) #查找指定目錄下的.c文件 obj=$(patsubst %.c, %.o, $(src)) #匹配替換,如將src中的a.c替換成a.o,b.c替換成b.o target=app $(target):$(obj)gcc $(obj) -o $(target) %.o:%.cgcc -c $< -o $@ .PHONY:clean #聲明偽目標,防止受當前目錄已存在clean的影響 clean:rm $(obj) $(target) -f #-f表示強制執行makefile的使用
在工作目錄下創建并編寫好makefile文件后,在終端輸入make(確保make已經安裝)即可生成目標文件以及最終的可執行程序。然后輸入make clean(如果寫了該規則)可以清理生成的中間文件和可執行程序。
總結
以上是生活随笔為你收集整理的新手入门makefile教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: org.apache.ibatis.re
- 下一篇: jqgrid删除某一列(隐藏)