




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗十四 Makefile工程管理器 14.1 編寫包含多文件的Makefile【實驗內(nèi)容】編寫一個包含多文件的Makefile?!緦嶒?zāi)康摹客ㄟ^對包含多文件的Makefile的編寫,熟悉各種形式的Makefile,并且進一步加深對Makefile中用戶自定義變量、自動變量及預(yù)定義變量的理解?!緦嶒炂脚_】PC機、CentOS 5 操作系統(tǒng)、gcc等工具?!緦嶒灢襟E】1. 用vi在同一目錄下編輯兩個簡單的Hello程序,如下所示:#hello.c#include hello.hint main()printf(Hello everyone!n);#hello.h#include 2. 仍在同一目錄下用vim編輯Makefile,不使用變量替換,用一個目標體實現(xiàn)(即直接將hello.c和hello.h編譯成hello目標體)。并用make驗證所編寫的Makefile是否正確。3. 將上述Makefile使用變量替換實現(xiàn)。同樣用make驗證所編寫的Makefile是否正確4. 用編輯另一Makefile,取名為Makefile1,不使用變量替換,但用兩個目標體實現(xiàn)(也就是首先將hello.c和hello.h編譯為hello.o,再將hello.o編譯為hello),再用make的-f選項驗證這個Makefile1的正確性。5. 將上述Makefile1使用變量替換實現(xiàn)【詳細步驟】1. 用vi打開上述兩個代碼文件hello.c和hello.h2. 在shell命令行中用gcc嘗試編譯,使用命令:gcc hello.c -o hello,并運行hello可執(zhí)行文件查看結(jié)果。3. 刪除此次編譯的可執(zhí)行文件:rm rf hello4. 用vim編輯Makefile,如下所示:hello:hello.c hello.hgcc hello.c -o hello5. 退出保存,在shell中鍵入:make查看結(jié)果6. 再次用vim打開Makefile,用變量進行替換,如下所示:OBJS :=hello.oCC :=gcchello:$(OBJS)$(CC) $ -o $7. 退出保存,在shell中鍵入:make查看結(jié)果8. 用vim編輯Makefile1,如下所示:hello:hello.ogcc hello.o -o hellohello.o:hello.c hello.hgcc -c hello.c -o hello.o9. 退出保存,在shell中鍵入:make f Makefile1查看結(jié)果10. 再次用vi編輯Makefile1,如下所示:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=gcchello:$(OBJS1)$(CC) $ -o $(OBJS1):$(OBJS2)$(CC) -c $ -o $在這里請注意區(qū)別$和$。11. 退出保存,在shell中鍵入:make f Makefile1查看結(jié)果14.2嵌套Makefile實驗【實驗?zāi)康摹?1、讀懂makefile文件,能根據(jù)makefile文件理清程序結(jié)構(gòu)2、能編寫簡單makefile3、掌握嵌套執(zhí)行makefile 【實驗環(huán)境】 PC機、CentOS 5 操作系統(tǒng),gcc等工具?!緦嶒灢襟E】我們要創(chuàng)建的目錄結(jié)構(gòu)如下:頂層Makefile1. 創(chuàng)建頂層目錄我們首先在用戶目錄下創(chuàng)建一個makefileTest的文件夾:#cd /opt #mkdir makefileTest#cd makefileTest創(chuàng)建好需要用到的文件夾#mkdir f1 f2 main obj include進入include文件夾創(chuàng)建一個共用頭文件#cd include#vim myinclude.h輸入如下內(nèi)容:#include 保存退出返回頂層目錄:#cd .2. 創(chuàng)建頂層Makefile文件#vim Makefile輸入以下內(nèi)容:CC = gccSUBDIRS = f1 換行(連接) f2 main objOBJS = f1.o f2.o main.o BIN = myappOBJS_DIR = objBIN_DIR = binexport 提升作用(提升為環(huán)境變量,可以作用與所有文件)CC OBJS BIN OBJS_DIR BIN_DIRall 虛目標(所有指令運行,這里運行CHECK_DIR和$(SUBDIRS)): CHECK_DIR $(SUBDIRS)CHECK_DIR :mkdir -p $(BIN_DIR)$(SUBDIRS) : ECHO顯示執(zhí)行過程make -C $ECHO:echo $(SUBDIRS)echo begin compileCLEAN :$(RM) $(OBJS_DIR)/*.orm -rf $(BIN_DIR)3. 進入在f1目錄下創(chuàng)建makefile#cd f1#vim f1.c輸入如下測試代碼:#include “./include/myinclude.h”void print1() printf(Message from f1.c.n); return;保存退出。#vim Makefile輸入如下內(nèi)容:./$(OBJS_DIR)/f1.o: f1.c在bin下生成f1.o$(CC) -c $ 依賴文件 -o $保存退出。進入f2目錄#cd ./f2#vim f2.c輸入如下測試代碼:#include “./include/myinclude.h”void print2() printf(Message from ); return;保存退出。#vim Makefile輸入如下內(nèi)容:./$(OBJS_DIR)/f2.o: f2.c$(CC) -c $ -o $ 保存退出。進入main目錄#cd ./main#vim main.c輸入如下內(nèi)容:#include int main() print1(); print2(); return 0;保存退出。#vim Makefile輸入如下內(nèi)容:./$(OBJS_DIR)/main.o: main.c$(CC) -c $ -o $ 保存退出。進入obj目錄#cd ./obj#vim Makefile輸入如下內(nèi)容:./$(BIN_DIR)/$(BIN) : $(OBJS)$(CC) -o $ $好了,到此準備工作已經(jīng)完畢,然我們來測試一下寫的makefile是否好用。進入頂層Makefile所在目錄,即makefileTest目錄。#make會出現(xiàn)如下信息:目錄樹結(jié)構(gòu)如下:我們看到在bin目錄下生成了我們的目標文件myapp,在obj目錄下生成了.o的中間文件。讓我們運行下myapp看下結(jié)果吧。#bin/myapp我們也可以用如下命令清除中間文件和目標文件,恢復(fù)make之前的狀態(tài):#make CLEAN我們可以看到已經(jīng)變?yōu)閙ake之前的目錄狀態(tài)了。大功告成。最后給大家解釋一下頂層makefile中一些命令的的含義吧。a) 我們注意到有一句echo $(SUBDIRS) echo其實是一句顯示命令通常,make會把其要執(zhí)行的命令行在命令執(zhí)行前輸出到屏幕上。當我們用“”字符在命令行前,那么,這個命令將不被make顯示出來,最具代表性的例子是,我們用這個功能來像屏幕顯示一些信息。如: echo 正在編譯XXX模塊.當make執(zhí)行時,會輸出“正在編譯XXX模塊.”字串,但不會輸出命令,如果沒有“”,那么,make將輸出: echo 正在編譯XXX模塊. 正在編譯XXX模塊.如果make執(zhí)行時,帶入make參數(shù)“-n”或“-just-print”,那么其只是顯示命令,但不會執(zhí)行命令,這個功能很有利于我們調(diào)試我們的Makefile,看看我們書寫的命令是執(zhí)行起來是什么樣子的或是什么順序的。 而make參數(shù)“-s”或“-slient”則是全面禁止命令的顯示。 b) (RM)并不是我們自己定義的變量,那它是從哪里來的呢?通常在清除文件的偽目標所定義的命令中“rm”使用選項“f”(-force)來防止在缺少刪除文件時出錯并退出,使“make clean”過程失敗。也可以在“rm”之前加上“-”來防止“rm”錯誤退出,這種方式時 make 會提示錯誤信息但不會退出。為了不看到這些討厭的信息,需要使用上述的第一種方式。 另外 make存在一個內(nèi)嵌隱含變量“RM”,它被定義為:“RM = rm f” 。因此在書寫“clean”規(guī)則的命令行時可以使用變量“$(RM)”來代替“rm”,這樣可以免出現(xiàn)一些不必要的麻煩!這是我們推薦的用法。c) make -C $這是一句嵌套makefile的語法,在一些大的工程中,我們會把我們不同模塊或是不同功能的源文件放在不同的目錄中,我們可以在每個目錄中都書寫一個該目錄的Makefile,這有利于讓我們的Makefile變得更加地簡潔,而不至于把所有的東西全部寫在一個Makefile中,這樣會很難維護我們的Makefile,這個技術(shù)對于我們模塊編譯和分段編譯有著非常大的好處。 例如,我們有一個子目錄叫subdir,這個目錄下有個Makefile文件,來指明了這個目錄下文件的編譯規(guī)則。那么我們總控的Makefile可以這樣書寫:subsystem: cd subdir & $(MAKE)其等價于:subsystem: $(MAKE) -C subdir定義$(MAKE)宏變量的意思是,也許我們的make需要一些參數(shù),所以定義成一個變量比較利于維護。這兩個例子的意思都是先進入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北工業(yè)大學(xué)畢業(yè)答辯
- 2025年北京五十中中考數(shù)學(xué)模擬試卷(4月份)
- 口腔科學(xué)試題及答案解析
- 初級烹飪考試題庫及答案
- 檔案管理 筆試題及答案
- 檢驗員考試復(fù)習(xí)的最佳時間安排試題及答案
- 倉儲知識考試題庫及答案
- 衛(wèi)生班會課件
- ai操作考試題庫及答案
- 分布式光伏電站設(shè)計培訓(xùn)手冊
- 七人學(xué)生小品《如此課堂》劇本臺詞手稿
- RFJ05-2009-DQ人民防空工程電氣大樣圖集
- 畢業(yè)設(shè)計(論文)-純電動汽車電池管理系統(tǒng)(bms)管理資料
- 醫(yī)療機構(gòu)消毒技術(shù)規(guī)范(2023年版)
- 中國古代文學(xué)史 馬工程課件(下)10第七編明代文學(xué) 第九章 晚明詩文
- GB/T 7600-2014運行中變壓器油和汽輪機油水分含量測定法(庫侖法)
- 農(nóng)戶貸款管理辦法銀監(jiān)發(fā)〔2012〕50號
- 兒科-補液-液體療法課件
- 優(yōu)生優(yōu)育TORCH檢測臨床意義與臨床咨詢課件
- 《踏雪尋梅》合唱譜
- 醫(yī)院感染臺賬【范本模板】
評論
0/150
提交評論