makefile 工程管應用理器

2021-10-01 04:41:14 字數 2249 閱讀 8918

makefile工程管理器

已有addressbook.c main.c addressbook.h 檔案  

建立vim  makefile 檔案 //m要大寫

寫makefile具體內容

在終端是輸入make   //相當於在終端輸入gcc  addressbook.c main.c

makefile 檔案相當於經歷了 預處理、編譯、彙編、鏈結這四個過程

每次在終端輸入make ,只編譯改動過的檔案,如果未改動,在終端輸入make 時會顯示最新的,然後輸入./a.out即可

//編譯過程

1.預處理 (巨集替換)

命令 gcc -e hello.c -o hello.i //一般用i,換成j也行

生成的hello.i 檔案中 包括了 標頭檔案#include 的內容

如果hello.c 中包括了#define pi 3.1415 ,那麼生成的hello.i檔案中的pi 都被替換為 3.1415

2.編譯(生成彙編檔案)

gcc -s hello.c -o hello.s

3.彙編(二進位制檔案)

gcc -c hello.c -o hello.o

4.鏈結

gcc hello.c

在.c檔案中用到的函式例如printf()函式,要去函式庫中找到匹配函式,生成可執行檔案

//從下往上

addressbook:  main.o  addressb

ook.o

gcc  main.o  addressbook.o  -o  addressbook  //連線

main.o :  main.c  addressbook.h

gcc  -c  main.c  -o  main.o

addressbook.o :  addressbook.c  addressbook.h

gcc  -c  addressbook.c  -o  addressbook.o   

.pyone: clean

clean:

rm -rf *.o       //刪除所有.o檔案

1.  .pyone: clean

clean:

rm -rf *.o

這三句加上可以刪除所有.o檔案

具體實現: 在終端上輸入make  clean // make代表首先要找到是否有makefile這個檔案

2. addressbook.o :  addressbook.c  addressbook.h

addressbook.o是目標檔案,addressbook.c addressbook.h 是原始檔

3.makefile 可以包含多個.c /.**件,每個.c 以及這個.c檔案裡所包含的.h標頭檔案都要寫成原始檔,然後生成目標檔案 (如果該檔案用到了資料庫以及執行緒,則後面加上-lpthread  -sqlite3)

例如addressbook.o :  addressbook.c  addressbook.h  -lpthread  -sqlite3

4. ./addressbook 類似於./a.out

5.gcc /  rm -rf *.o前添的是tab鍵(不是空格)

6. //給makefile 檔案 換名字

mv +makefile+ newname //mv 剪下

make -f + newname 例如 make -f makefile1 //makefile1 檔案替換了 makefile檔案

make -f makefile1  clean   //是makefile1 檔案的make clean命令

7帶變數的makefile

obj:  main.o  addressbook.o    

addressbook:$(obj)

//帶有變數可少寫.o檔案,使書寫簡潔

gcc  $(obj)  -o  addressbook   

main.o :  main.c  addressbook.h

gcc  -c  main.c  -o  main.o

addressbook.o :  addressbook.c  addressbook.h

gcc  -c  addressbook.c  -o   addressbook.o

.pyone: clean

clean:

rm -rf *.o       //刪除所有.o檔案

基礎程式設計學習筆記二(makefile工程管理

makefile工程管理 makefile檔案描述了整個工程的編譯,連線等規則 規則如何生成乙個或多個目標檔案 targets 目標 prerequisites 依賴 command 路徑 示例 test34 test34.o test33.o test31.o tab gcc o 第一條語句為最終...

工程Makefile例項

1級makefil phony clean for subdir in subdirs do cd subdir make clean done 級makefile target lib notdir curdir a objs wildcard o cc flags fpic md 靜態庫合成動態...

Makefile工程編譯

1.寫在前面 本篇文章講的是接前面makefile之編譯多個可執行程式中第二個需求,並延伸到對正規工程的編譯。2.工程 我接觸的工程有2種情況 所有原始檔都放乙個目錄 按模組分放不同的目錄 下面按照這兩種情況講解。3.所有原始檔都放乙個目錄 不建議所有原始檔都放乙個目錄,當工程大時,乙個目錄下會有很...