NO.4 Makefile文件制作

#编译生成可行文件

#自定义变量
src=$(wildcard ./*.c)     #查找当前目录下的所有.c文件
object=$(patsubst %.c, %.o, $(src))        # 将.c文件名改为.o
target=main

#自带变量
CC=gcc
CPPFLAGS=-I./    #指定头文件路径

#目标文件依赖
$(target):$(object)
    $(CC) -o $@ $^

#.o文件依赖
%.o:%.c
    $(CC) -g -o $@ -c $< $(CPPFLAGS) 

#声明clean伪目标
.PHONY:clean
#第二目标
clean:
    -rm -f $(target) $(object)
Makefile 标准文件-生成可执行文件

一、Makefile 定义变量

(1)用户自定义变量

  • 变量定义直接用 =
  • 使用变量值用 $(变量名)
  • 如:下面是变量的定义和使用
    foo = abc            // 定义变量并赋值
    bar = $(foo)        // 使用变量, $(变量名)

(2)Makefile自带变量

  • CC = gcc #arm-linux-gcc
    CPPFLAGS : C预处理的选项 -I
    CFLAGS:   C编译器的选项 -Wall -g -c
    LDFLAGS :  链接器选项 -L  -l

(3)自动变量(只能在命令中使用)

  • $@: 表示规则中的目标
    $<: 表示规则中的第一个条件
    $^: 表示规则中的所有条件, 组成一个列表, 以空格隔开, 如果这个列表中有重复的项则消除重复项。

二、makefile 模式规则

  • 比如: main.o:main.c  fun1.o: fun1.c  fun2.o:fun2.c, 说的简单点就是: xxx.o:xxx.c
  • 直接使用替代:%.o : %.c

注意:此时Makefile文件可简化成这样:(此时还可以简化)

、makefile 函数

  • 1.wildcard – 查找指定目录下的指定类型的文件
      src=$(wildcard *.c)  //找到当前目录下所有后缀为.c的文件,赋值给src
    2.patsubst – 匹配替换
      obj=$(patsubst %.c,%.o, $(src)) //把src变量里所有后缀为.c的文件替换成.o

注意:此时Makefile文件可简化成这样:

 四、makefile 清理操作

  • 伪目标声明:
  • .PHONY:clean
        声明目标为伪目标之后, makefile将不会检查该目标是否存在或者该目标是否需要更新。

     

注意:此时Makefile文件已经成型

  五、其他

  • make -f : 用 make 执行指定的 makefile: make -f mainmak
    

      

 

#、注意事项

  1. Makefile中使用“#”注释
  2. 使用 touch file.c 改变了源文件的修改时间,则file.c源文件将被Make重新编译;
  3. Makefile文件中分第一目标,第二目标,默认make执行第一个目标,如果将clean移动到main前面,则第一目标为clean,要执行main则需要使用“make main”。

 

posted @ 2023-09-30 13:42  真是服了你个老六!!  阅读(20)  评论(0编辑  收藏  举报