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.所有原始檔都放乙個目錄 不建議所有原始檔都放乙個目錄,當工程大時,乙個目錄下會有很...