makefile 編寫規則
阿新 • • 發佈:2019-03-29
可執行 缺點 容易 編譯鏈接 清晰 bool div class 區別
一、makefile 規則
1、如果沒編譯過,將所有的 (.c) 文件編譯並且鏈接;
2、如果有其中的 (.c) 文件改變,編譯並鏈接改變的文件;
3、如果(.h)文件被修改,編譯引用相應的 (.c) 文件, 鏈接;
4、在隨意修改時間的情況下,會導致編譯過程中生成的 (.o 中間文件)與可執行文件時間不一致,此時會編譯相應的文件,並鏈接,最終編譯成可執行文件;
二、第一版 makefile:
例如有2個 .h 文件(utils.h, player.h, actor.h)和 3個 .c 文件( main.c, player.c, actor.c)需要編譯鏈接:
/*****main.c*********/ #include "utils.h" #include "player.h" void main() { // do something }
/*******player.c**********/ #include "utils.h" #include "actor.h" bool create_player() { // do something }
/****actor.c************/ #include "utils.h" bool create_actor() { // do something}
/********* makefile *****************/ test : main.o actor.o cc -o test main.o actor.o main.o : main.c utils.h player.h actor.h cc -c main.c palyer.o: player.c player.h actor.h utils.h cc -o player.c actor.o: actor.h utils.h cc-o actor.c clean: rm test ain.o player.o actor.o
優點:可毒性很強,思路清晰 明了;
缺點:麻煩,重復的依賴過多,當需要編譯大量文件時容易出錯;
第二版:利用 makefile 的變量;
/********* makefile *****************/ obj = main.o actor.o // 跟第一版比較,唯一的區別在這 test : $(obj) // 這兒 cc -o $(obj) // 這兒 main.o : main.c utils.h player.h actor.h cc -c main.c palyer.o: player.c player.h actor.h utils.h cc -o player.c actor.o: actor.h utils.h cc -o actor.c clean: rm test ain.o player.o actor.o
makefile 編寫規則