makefile

1:makelinux

  gcc 編譯器app

  make - linux自帶的構建器函數

    構建的規則在makefile中spa

 

2:makefile文件的命名code

  makefileblog

  Makefileget

 

3:makefile中的規則編譯器

  gcc a.c b.c c.c -o app編譯

    I:三部分:目標,依賴,命令class

        目標:依賴

        (Tab縮減)命令

    eg: app:a.c b.c c.c

        gcc a.c b.c c.c -o app

    II:makefile中能夠🈶一條或多條規則組成

4:makefile的編寫

  版本一:

  

eg: app:a.c b.c c.c
        gcc a.c b.c c.c -o app

 

  版本二:

 

app:main.o add.o 

    gcc main.o add.o-o app
  main.o:main.c

    gcc main.c -c
  add.o:add.c

    gcc add.c -c

 

 

  makefile工做原理:

    ->:檢查依賴是否存在:  

      ->:向下搜索下邊的規則,若是有規則則用來生成查找的依賴,執行規則中的命令

    ->:依賴存在,則判斷是否須要更新

      ->:原則:目標的時間 > 依賴的時間

        反之,則更新

  版本三:

  (1):自定義變量:obj = a.o b.o c.o

    變量的取值:aa = $(obj)

  (2):makefile自帶的變量:大寫

    CPPFLAGS

    CC

  (3)自動變量:

    $@:  規則中的目標

    $<:  規則中的第一個依賴

    $^:  規則中全部的依賴

        只能在規則的 命令中使用

obj = main.o add.o sub.o mul.o
target = app
$(target):$(obj)
    gcc $(obj) -o $(target)

%.o:%.c
    gcc -c $< -o $@ 

  模式匹配:

    %.o %.c

     gcc $(obj) -o $(target)   ->   gcc $^ -o $@

5:makefile中的函數(可移植)

  makefile中全部的函數都是有返回值

  (1):查到指定目錄下邊指定類型的文件

    ->wildcard

      eg: src = $(wildcard ./*.c)

  (2):匹配替換

    ->patsubst

      eg:obj: $(patsubst %.c,%.o,$(src))

src = $(wildcard ./*.c)
obj = $(patsubst %.c,%.oc$(src))
target = app
$(target):$(obj)
    gcc $^ -o $@

%.o:%.c
    gcc -c $< -o $@

6:清理項目

  clean:

    -rm $(obj) $(target) -f

  聲明僞目標:

    .PHONY : clean

    clean:

      -rm $(obj) $(target) -f

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息