makfile例子

作者: Markz__ | 来源:发表于2021-06-21 20:20 被阅读0次

    1. 语法

    target ... : prerequisites ...
    command
    ...
    ...

    target是指 目标文件, 可以是 Object File, 也可以是可执行文件;
    prerequisites是指生成target所需要的文件或者目标依赖项;
    command表示:make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头

    通配符
    * :: 表示任意一个或多个字符
    ? :: 表示任意一个字符
    […] :: [abcd] 表示a,b,c,d中任意一个字符, [^abcd]表示除a,b,c,d以外的字符, [0-9]表示 0~9中任意一个数字
    ~ :: 表示用户的home目录

    变量使用:
    allobj := main.o hello.o (:=和=的区别 :=是立即赋值 =要用时展开类define)
    内置特殊变量:
    $@ 表示目标文件
    $< 表示第一个依赖文件
    $*
    $%
    $^ 表示所有的依赖文件,
    $?
    $+

    gcc -MM 自动寻找.o文件依赖所有.h文件 gcc -MM a.c >a.d 文件内容 a.o:a.c xx.h xxx.h

    2. 例子:

    target := hello.out
    allobjc := $(shell ls *.c)
    allobj := $(allobjc:.c=.o)
    alldep := $(allobjc:.c=.d)
    CC := gcc
    
    all: $(target) #注意放的位置
    
    # %为通配符
    %.d: %.c 
        $(CC) -MM $< > $@
    -include $(alldep)
    # include main.d 文件内容
    # main.o: main.c hello.h
    # makefile会合并上下两句为 mian.o: main.c hello.h
    # mian.o: main.c
    %.o: %.c
        $(CC) -c $<
    
    $(target): $(allobj)
        $(CC) -o $@  $^
    
    .POHONY clean:
        -rm *.o *.d $(target) 
    
    

    相关文章

      网友评论

        本文标题:makfile例子

        本文链接:https://www.haomeiwen.com/subject/zrbmyltx.html