日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

新手入门makefile教程

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新手入门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教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。