




已閱讀5頁,還剩3頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗十四 Makefile工程管理器 14.1 編寫包含多文件的Makefile【實驗內容】編寫一個包含多文件的Makefile。【實驗目的】通過對包含多文件的Makefile的編寫,熟悉各種形式的Makefile,并且進一步加深對Makefile中用戶自定義變量、自動變量及預定義變量的理解。【實驗平臺】PC機、CentOS 5 操作系統、gcc等工具。【實驗步驟】1. 用vi在同一目錄下編輯兩個簡單的Hello程序,如下所示:#hello.c#include hello.hint main()printf(Hello everyone!n);#hello.h#include 2. 仍在同一目錄下用vim編輯Makefile,不使用變量替換,用一個目標體實現(即直接將hello.c和hello.h編譯成hello目標體)。并用make驗證所編寫的Makefile是否正確。3. 將上述Makefile使用變量替換實現。同樣用make驗證所編寫的Makefile是否正確4. 用編輯另一Makefile,取名為Makefile1,不使用變量替換,但用兩個目標體實現(也就是首先將hello.c和hello.h編譯為hello.o,再將hello.o編譯為hello),再用make的-f選項驗證這個Makefile1的正確性。5. 將上述Makefile1使用變量替換實現【詳細步驟】1. 用vi打開上述兩個代碼文件hello.c和hello.h2. 在shell命令行中用gcc嘗試編譯,使用命令:gcc hello.c -o hello,并運行hello可執行文件查看結果。3. 刪除此次編譯的可執行文件:rm rf hello4. 用vim編輯Makefile,如下所示:hello:hello.c hello.hgcc hello.c -o hello5. 退出保存,在shell中鍵入:make查看結果6. 再次用vim打開Makefile,用變量進行替換,如下所示:OBJS :=hello.oCC :=gcchello:$(OBJS)$(CC) $ -o $7. 退出保存,在shell中鍵入:make查看結果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查看結果10. 再次用vi編輯Makefile1,如下所示:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=gcchello:$(OBJS1)$(CC) $ -o $(OBJS1):$(OBJS2)$(CC) -c $ -o $在這里請注意區別$和$。11. 退出保存,在shell中鍵入:make f Makefile1查看結果14.2嵌套Makefile實驗【實驗目的】 1、讀懂makefile文件,能根據makefile文件理清程序結構2、能編寫簡單makefile3、掌握嵌套執行makefile 【實驗環境】 PC機、CentOS 5 操作系統,gcc等工具。【實驗步驟】我們要創建的目錄結構如下:頂層Makefile1. 創建頂層目錄我們首先在用戶目錄下創建一個makefileTest的文件夾:#cd /opt #mkdir makefileTest#cd makefileTest創建好需要用到的文件夾#mkdir f1 f2 main obj include進入include文件夾創建一個共用頭文件#cd include#vim myinclude.h輸入如下內容:#include 保存退出返回頂層目錄:#cd .2. 創建頂層Makefile文件#vim Makefile輸入以下內容:CC = gccSUBDIRS = f1 換行(連接) f2 main objOBJS = f1.o f2.o main.o BIN = myappOBJS_DIR = objBIN_DIR = binexport 提升作用(提升為環境變量,可以作用與所有文件)CC OBJS BIN OBJS_DIR BIN_DIRall 虛目標(所有指令運行,這里運行CHECK_DIR和$(SUBDIRS)): CHECK_DIR $(SUBDIRS)CHECK_DIR :mkdir -p $(BIN_DIR)$(SUBDIRS) : ECHO顯示執行過程make -C $ECHO:echo $(SUBDIRS)echo begin compileCLEAN :$(RM) $(OBJS_DIR)/*.orm -rf $(BIN_DIR)3. 進入在f1目錄下創建makefile#cd f1#vim f1.c輸入如下測試代碼:#include “./include/myinclude.h”void print1() printf(Message from f1.c.n); return;保存退出。#vim Makefile輸入如下內容:./$(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輸入如下內容:./$(OBJS_DIR)/f2.o: f2.c$(CC) -c $ -o $ 保存退出。進入main目錄#cd ./main#vim main.c輸入如下內容:#include int main() print1(); print2(); return 0;保存退出。#vim Makefile輸入如下內容:./$(OBJS_DIR)/main.o: main.c$(CC) -c $ -o $ 保存退出。進入obj目錄#cd ./obj#vim Makefile輸入如下內容:./$(BIN_DIR)/$(BIN) : $(OBJS)$(CC) -o $ $好了,到此準備工作已經完畢,然我們來測試一下寫的makefile是否好用。進入頂層Makefile所在目錄,即makefileTest目錄。#make會出現如下信息:目錄樹結構如下:我們看到在bin目錄下生成了我們的目標文件myapp,在obj目錄下生成了.o的中間文件。讓我們運行下myapp看下結果吧。#bin/myapp我們也可以用如下命令清除中間文件和目標文件,恢復make之前的狀態:#make CLEAN我們可以看到已經變為make之前的目錄狀態了。大功告成。最后給大家解釋一下頂層makefile中一些命令的的含義吧。a) 我們注意到有一句echo $(SUBDIRS) echo其實是一句顯示命令通常,make會把其要執行的命令行在命令執行前輸出到屏幕上。當我們用“”字符在命令行前,那么,這個命令將不被make顯示出來,最具代表性的例子是,我們用這個功能來像屏幕顯示一些信息。如: echo 正在編譯XXX模塊.當make執行時,會輸出“正在編譯XXX模塊.”字串,但不會輸出命令,如果沒有“”,那么,make將輸出: echo 正在編譯XXX模塊. 正在編譯XXX模塊.如果make執行時,帶入make參數“-n”或“-just-print”,那么其只是顯示命令,但不會執行命令,這個功能很有利于我們調試我們的Makefile,看看我們書寫的命令是執行起來是什么樣子的或是什么順序的。 而make參數“-s”或“-slient”則是全面禁止命令的顯示。 b) (RM)并不是我們自己定義的變量,那它是從哪里來的呢?通常在清除文件的偽目標所定義的命令中“rm”使用選項“f”(-force)來防止在缺少刪除文件時出錯并退出,使“make clean”過程失敗。也可以在“rm”之前加上“-”來防止“rm”錯誤退出,這種方式時 make 會提示錯誤信息但不會退出。為了不看到這些討厭的信息,需要使用上述的第一種方式。 另外 make存在一個內嵌隱含變量“RM”,它被定義為:“RM = rm f” 。因此在書寫“clean”規則的命令行時可以使用變量“$(RM)”來代替“rm”,這樣可以免出現一些不必要的麻煩!這是我們推薦的用法。c) make -C $這是一句嵌套makefile的語法,在一些大的工程中,我們會把我們不同模塊或是不同功能的源文件放在不同的目錄中,我們可以在每個目錄中都書寫一個該目錄的Makefile,這有利于讓我們的Makefile變得更加地簡潔,而不至于把所有的東西全部寫在一個Makefile中,這樣會很難維護我們的Makefile,這個技術對于我們模塊編譯和分段編譯有著非常大的好處。 例如,我們有一個子目錄叫subdir,這個目錄下有個Makefile文件,來指明了這個目錄下文件的編譯規則。那么我們總控的Makefile可以這樣書寫:subsystem: cd subdir & $(MAKE)其等價于:subsystem: $(MAKE) -C subdir定義$(MAKE)宏變量的意思是,也許我們的make需要一些參數,所以定義成一個變量比較利于維護。這兩個例子的意思都是先進入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 春夜喜雨:唐詩鑒賞及創作啟發教學教案
- 老舊小區改造工程的策略及實施路徑
- 現代企業管理理論與實務試題集匯編
- 我的心愛之物物品介紹作文(5篇)
- 軟件測試技術與實踐題目解析
- 《數學微積分基本概念與運用教案》
- 國際貿易發展趨勢研究表格
- 書中尋寶記讀后感演講稿15篇
- 2025年物理學高考復習綜合測試卷及答案
- 2025年生態學與可持續發展專業考試知識試題及答案
- 英語簡單句專項練習題含參考答案
- 2023年甘肅省酒泉市中考語文試卷【含答案】
- 湖北襄陽市檢察機關-襄陽市城郊地區檢察院招考聘用67人模擬預測(共500題)筆試參考題庫附答案詳解
- 2023-2024學年河南省濮陽市小學語文五年級期末提升測試題附參考答案和詳細解析
- 延長石油筆試題庫
- 阿里巴巴開店注意事項
- 思想政治理論綜合實踐知到章節答案智慧樹2023年太原理工大學
- 臍灸技術評分標準
- 旅游俄語知到章節答案智慧樹2023年海南外國語職業學院
- 鄉村規劃原理智慧樹知到答案章節測試2023年同濟大學
- ArcGIS高級制圖技術
評論
0/150
提交評論