C語言高級編程7-Makefile1+課件_第1頁
C語言高級編程7-Makefile1+課件_第2頁
C語言高級編程7-Makefile1+課件_第3頁
C語言高級編程7-Makefile1+課件_第4頁
C語言高級編程7-Makefile1+課件_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言高級編程-MakefileMake簡介工程管理器,顧名思義,是指管理較多的文件Make工程管理器也就是個“自動編譯管理器”,這里的“自動”是指它能夠根據文件時間戳自動發現更新過的文件而減少編譯的工作量,同時,它通過讀入Makefile文件的內容來執行大量的編譯工作Make將只編譯改動的代碼文件,而不用完全編譯。3Makefile基本結構Makefile是Make讀入的唯一配置文件由make工具創建的目標體(target),通常是目標文件或可執行文件要創建的目標體所依賴的文件(dependency_file)創建每個目標體時需要運行的命令(command)注意:命令行前面必須是一個”TAB鍵”,否則編譯錯誤為:***missingseparator.Stop.4Makefile基本結構Makefile格式target:dependency_files<TAB>command例子hello.o:hello.chello.h gcc–chello.c–ohello.o5Makefile變量一個復雜一些的例子sunq:kang.oyul.o gcckang.oyul.o-osunqkang.o:kang.ckang.h gcc–Wall–O-g–ckang.c-okang.oyul.o:yul.c gcc-Wall–O-g–cyul.c-oyul.o注釋:-Wall:表示允許發出gcc所有有用的報警信息.-c:只是編譯不鏈接,生成目標文件”.o”-ofile:表示把輸出文件輸出到file里關于更多的用man工具6創建和使用變量創建變量的目的:用來代替一個文本字符串:1.系列文件的名字

2.傳遞給編譯器的參數

3.需要運行的程序

4.需要查找源代碼的目錄

5.你需要輸出信息的目錄

6.你想做的其它事情。7創建和使用變量變量定義的兩種方式遞歸展開方式VAR=var簡單方式VAR:=var變量使用$(VAR)用”$”則用”$$”來表示類似于編程語言中的宏8創建和使用變量剛才的例子OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS) $(CC)$(OBJS)-osunqkang.o:kang.ckang.h $(CC)$(CFLAGS)-ckang.c-okang.oyul.o:yul.cyul.h $(CC)$(CFLAGS)-cyul.c-oyul.o9創建和使用變量遞歸展開方式VAR=var例子:foo=$(bar)bar=$(ugh)ugh=Huh?$(foo)的值為?echo$(foo)來進行查看10創建和使用變量優點:它可以向后引用變量缺點:

不能對該變量進行任何擴展,例如

CFLAGS=$(CFLAGS)-O

會造成死循環11創建和使用變量簡單方式VAR:=var m:=mm

x:=$(m)

y:=$(x)bar

x:=later

echo$(x)$(y)看看打印什么信息?12創建和使用變量用這種方式定義的變量,會在變量的定義點,按照被引用的變量的當前值進行展開這種定義變量的方式更適合在大的編程項目中使用,因為它更像我們一般的編程語言13創建和使用變量用?=定義變量dir:=/foo/barFOO?=barFOO是?14創建和使用變量含義是,如果FOO沒有被定義過,那么變量FOO的值就是“bar”,如果FOO先前被定義過,那么這條語將什么也不做,其等價于:

ifeq($(originFOO),undefined)FOO=barendif15創建和使用變量為變量添加值

你可以通過+=為已定義的變量添加新的值Main=hello.ohello-1.oMain+=hello-2.o16創建和使用變量預定義變量AR庫文件維護程序的名稱,默認值為ar。AS匯編程序的名稱,默認值為as。CCC編譯器的名稱,默認值為cc。CPPC預編譯器的名稱,默認值為$(CC)–E。CXXC++編譯器的名稱,默認值為g++。FCFORTRAN編譯器的名稱,默認值為f77RM文件刪除程序的名稱,默認值為rm-f17創建和使用變量例子:Hello:main.cmain.h<tab>$(CC)–ohellomain.cclean:<tab>$(RM)hello18創建和使用變量預定義變量ARFLAGS庫文件維護程序的選項,無默認值。ASFLAGS匯編程序的選項,無默認值。CFLAGSC編譯器的選項,無默認值。CPPFLAGS C預編譯的選項,無默認值。CXXFLAGS C++編譯器的選項,無默認值。FFLAGS FORTRAN編譯器的選項,無默認值。19創建和使用變量剛才的例子OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS) $(CC)$(OBJS)-osunqkang.o:kang.ckang.h $(CC)$(CFLAGS)-ckang.c-okang.oyul.o:yul.cyul.h $(CC)$(CFLAGS)-cyul.c-oyul.o20創建和使用變量自動變量$* 不包含擴展名的目標文件名稱$+ 所有的依賴文件,以空格分開,并以出現的先后為序,可能包含重復的依賴文件$< 第一個依賴文件的名稱$? 所有時間戳比目標文件晚的的依賴文件,并以空格分開$@目標文件的完整名稱$^ 所有不重復的目標依賴文件,以空格分開$%如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱21創建和使用變量剛才的例子:OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS) $(CC)$^-o$@kang.o:kang.ckang.h $(CC)$(CFLAGS)-c$<-o$@yul.o:yul.cyul.h $(CC)$(CFLAGS)-c$<-o$@22創建和使用變量環境變量make在啟動時會自動讀取系統當前已經定義了的環境變量,并且會創建與之具有相同名稱和數值的變量如果用戶在Makefile中定義了相同名稱的變量,那么用戶自定義變量將會覆蓋同名的環境變量23Make使用直接運行make選項-Cdir讀入指定目錄下的Makefile

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論