LinuxC編程基礎(chǔ)--mak.ppt_第1頁
LinuxC編程基礎(chǔ)--mak.ppt_第2頁
LinuxC編程基礎(chǔ)--mak.ppt_第3頁
LinuxC編程基礎(chǔ)--mak.ppt_第4頁
LinuxC編程基礎(chǔ)--mak.ppt_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二章 Linux C編程基礎(chǔ)-make,GNU make管理項目,為什么要使用make? 工作量問題:對于擁有多個(上百個)源文件的軟件項目,只需編寫一次編譯過程,而不需要在每次源文件修改后重復輸入眾多的文件名和編譯命令進行編譯; 效率問題:make能夠根據(jù)文件的時間戳自動發(fā)現(xiàn)更新過的源文件,并通過讀入Makefile文件來對更新的源文件進行編譯而對其它文件只進行鏈接操作。,2,makefile,makefile的格式: 目標:欲生成的目標文件,通常是目標文件或可執(zhí)行文件; 依賴項:生成目標需要的文件,多個文件以空格隔開。 命令:創(chuàng)建每個目標體時需要運行的命令。可使用續(xù)行號()將一個單獨的命令行延續(xù)成幾行。 Makefile是make讀入的唯一配置文件,其中包含的規(guī)則指明編譯哪些文件以及怎樣編譯這些文件。,目標:依賴項列表 (Tab縮進)命令,makefile,Makefile示例,Makefile里有什么?,1、 顯式規(guī)則。 顯式規(guī)則說明了,如何生成一個或多的的目標文件。 這是由Makefile的書寫者明顯指出,要生成的文件,文件的依賴文件,生成的命令。 2、隱式規(guī)則。由于我們的make有自動推導的功能,所以隱晦的規(guī)則可以讓我們比較粗糙地簡略地書寫Makefile,這是由make所支持的。 3、 變量的定義。 在Makefile中我們要定義一系列的變量,變量一般都是字符串,這個有點你C語言中的宏,當Makefile被執(zhí)行時,其中的變量都會被擴展到相應的引用位置上。 4、 文件指示。 其包括了三個部分,一個是在一個Makefile中引用另一個Makefile,就像C語言中的include一樣;另一個是指根據(jù)某些情況指定Makefile中的有效部分,就像C中的預編譯#if一樣;還有就是定義一個多行的命令。 5、 注釋。 Makefile中只有行注釋,其注釋是用“#”字符。,make命令,make工具的使用格式: make 命令選項 命令參數(shù) 通常使用make就可以了,make會按序查找名為GNUmakefile、Makefile和makefile作為編譯指導文件;建議使用Makefile。 在make命令后面鍵入目標名即可建立指定的目標;如果不跟目標名則建立Makefile中定義的第一個目標。 make -f file 讀入當前目錄下的file文件作為Makefile;,Make工作原理,make做的工作: 在執(zhí)行g(shù)cc時會先檢查依賴文件是否存在: 若不存在就先執(zhí)行別的規(guī)則以生成缺少的依賴文件,最后生成相關(guān)的目標文件。 如果存在,并不急于執(zhí)行g(shù)cc,而是先比較依賴文件與其對應源文件的時間戳。如果源文件較新的話,就會執(zhí)行相應的規(guī)則來重新生成依賴文件和目標文件。否則就不會執(zhí)行相應的gcc。,Make工作原理,1)如果工程沒有編譯過,那么所有C文件都要編譯并被鏈接。 2)如果這個工程的某幾個C文件被修改,那么只編譯被修改的C文件,并鏈接目標程序。 3)如果這個工程的頭文件被改變了,那么需要編譯引用了這幾個頭文件的C文件,并鏈接目標程序。,目標的依賴關(guān)系,Makefile中的變量,變量的主要作用如下: 保存文件名列表:作為依賴文件的一些目標文件名出現(xiàn)在可執(zhí)行文件的規(guī)則中,而在這個規(guī)則的命令行里同樣包含這些文件并傳遞給gcc做為命令參數(shù)。如果使用一個變量來保存所有的目標文件名,則可以方便地加入新的目標文件而且不易出錯。 保存可執(zhí)行命令名:如果項目被用在一個非gcc的系統(tǒng)里,則必須將所有出現(xiàn)編譯器名的地方改成用新的編譯器名。但是如果使用一個變量來代替編譯器名,那么只需要改變該變量的值。 保存編譯器的參數(shù):在很多源代碼編譯時,gcc需要很長的參數(shù)選項,在很多情況下,所有的編譯命令使用一組相同的選項,如果把這組選項使用一個變量代表,那么可以把這個變量放在所有引用編譯器的地方。當要改變選項的時候,只需改變一次這個變量的內(nèi)容即可。,變量的定義和使用,Makefile中的變量是用一個文本串在Makefile中定義的,這個文本串就是變量的值。只要在一行的開始寫下這個變量的名字,后面跟一個“”號,以及要設(shè)定這個變量的值即可定義變量,下面是定義變量的語法: VARNAME=string 使用時,把變量用括號括起來,并在前面加上$符號,就可以引用變量的值: $VARNAME 變量一般都在Makefile的頭部定義。按照慣例,所有的Makefile變量都應該是大寫。如果變量的值發(fā)生變化,就只需要在一個地方修改,從而簡化了Makefile的維護。,變量的其他定義方法:,x := foo y := $(x) bar,FOO ?= bar,+=:追加變量值,make命令,Makefile中變量的使用,變量的定義: OBJS = val,新Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $(OBJS) -o main main.o: main.c $(CC) main.c -o main.o hello.o: hello.c hello.h $(CC) hello.c -o hello.o,變量的使用: $(OBJS),Makefile文件內(nèi)容: main: main.o hello.o gcc main.o hello.o -o main main.o: main.c gcc -Wall -c main.c -o main.o hello.o: hello.c hello.h gcc -Wall -c hello.c -o hello.o,14,Makefile中常見自動變量,$* 不包含擴展名的目標文件名稱 $+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復的依賴文件 $ 第一個依賴文件的名稱 $? 所有時間戳比目標文件晚的依賴文件,并 以空格分開 $ 目標文件的完整名稱 $ 所有不重復的依賴文件,以空格分開,make命令,Makefile中常見的自動變量,Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $(OBJS) -o main main.o: main.c $(CC) main.c -o main.o hello.o: hello.c hello.h $(CC) hello.c -o hello.o,新Makefile文件內(nèi)容: OBJS = main.o hello.o CC = gcc -Wall -c main: $(OBJS) gcc $ -o $ main.o: main.c $(CC) $ -o $ hello.o: hello.c hello.h $(CC) $ -o $,16,Makefile中常見預定義變量,AR 歸檔維護程序的名稱,默認值為ar AS 匯編程序的名稱,默認值為as CC C編譯器的名稱,默認值為cc CPP C預編譯器的名稱,默認值為$(CC) E RM 文件刪除程序的名稱,默認值為rm f ARFLAGS 庫文件維護程序的選項,無默認值 ASFLAGS 傳給匯編程序的標志,無默認值 CFLAGS C編譯器的選項,無默認值 CPPFLAGS C預編譯的選項,無默認值,Makefile規(guī)則,1、隱式規(guī)則 隱式規(guī)則定義了將一個具有某個后綴的文件(例如,.c 文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o 文件)的方法。每個后綴規(guī)則以兩個成對出現(xiàn)的后綴名定義。 注意:在隱式規(guī)則只能查找到相同文件名的不同后綴名文件,如”file.o”文件必須由”file.c”文件生成。,例:,main: main.o hello.o gcc main.o hello.o -o main,main: main.o hello.o gcc main.o hello.o -o main main.o: main.c hello.h gcc -Wall -c main.c -o main.o hello.o: hello.c hello.h gcc -Wall -c hello.c -o hello.o,Makefile規(guī)則,2、模式規(guī)則 模式規(guī)則是用來定義相同處理規(guī)則的多個文件的。 隱式規(guī)則僅僅能夠用make默認的變量來進行操作,而模式規(guī)則還能引入用戶自定義變量,為多個文件建立相同的規(guī)則,從而簡化Makefile的編寫。 模式規(guī)則的格式類

溫馨提示

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

評論

0/150

提交評論