Makefile 是和 make 命令一塊兒配合使用的.spa
不少大型項目的編譯都是經過 Makefile 來組織的, 若是沒有 Makefile, 那不少項目中各類庫和代碼之間的依賴關係不知會多複雜.命令行
Makefile的組織流程的能力如此之強, 不只能夠用來編譯項目, 還能夠用來組織咱們平時的一些平常操做. 這個須要你們發揮本身的想象力.3d
長話短說,咱們直接來實戰下:code
首先咱們建立個c文件和h文件:對象
main.cblog
#include <stdio.h> #include "fun.h"
int main() { fun(); return 0; }
fun.h自動化
void fun() { printf("hello world!\n"); }
下面就是來對makefile進行編寫:io
hello:main.o cc -o hello main.o main.o:main.c fun.h cc -c main.c
.PHONY: hello clean
clean: rm hello main.o
hello:你須要生成的目標文件編譯
main.o:屬於前置條件class
cc -o hello main.o:屬於命令
下面代碼也相似
clean:屬於「僞目標」,主要就是用來刪除對象文件
可是,若是當前目錄中,正好有一個文件叫作clean或者hello,那麼這個命令不會執行。由於Make發現clean文件已經存在,就認爲沒有必要從新構建了,就不會執行指定的rm命令。
爲了不這種狀況,能夠明確聲明clean和hello是"僞目標",寫法以下。
.PHONY: hello clean
下面咱們進行編譯:
在命令行寫入:make
能夠發現,目標文件已經生成
而後咱們繼續。。。。
發現成功了。。美滋滋
若是文件很是多,咱們能夠統一編寫以下的makefile文件:
hello:main.o gcc -o $@ $^ .c.o: gcc -c $? .PHONY: hello clean clean: rm hello *.o
下面是全部的自動化變量及其說明: