长风破浪会有时,直挂云帆济沧海

Dream Word

博客园 首页 新随笔 联系 订阅 管理

1:make

  gcc 编译器

  make - linux自带的构建器

    构建的规则在makefile中

 

2:makefile文件的命名

  makefile

  Makefile

 

3:makefile中的规则

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

    I:三部分:目标,依赖,命令

        目标:依赖

        (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

posted on 2018-03-25 00:43  长风II  阅读(119)  评论(0编辑  收藏  举报