美文网首页
makefile编写规则

makefile编写规则

作者: D_Major | 来源:发表于2020-03-01 15:46 被阅读0次

    目标:依赖
    (tab)指令
    第一行必须为最终目标, 生成对象文件.o是为了避免重复编译未修改的.c文件.

    makefile中的自动变量只能在规则中的命令使用
    $<: 规则中第一个依赖
    $@: 规则中的目标
    $^: 规则中的所有依赖
    
    app:main.o sub.o mul.o
        gcc $^ -o $@ #(即gcc main.o sub.o mul.o -o app)
    
    %.o:%.c
        gcc -c $< -o $@
    

    也可以使用自带函数和自定义变量

    src=$(wildcard ./*.c) #用来查找文件, 返回字符串, 加$()成为变量
    obj=$(patsubst ./%.c, ./%.o, $(src))  #字符串替换, 把$(src)中的.c都替换成.o
    # 以上两句等价于obj=main.o sub.o mul.o
    target=app
    $(target):$(obj)
        gcc $(obj) -o $(target)
    
    %.o:%.c
        gcc -c $< -o $@
    
    # 删除所有.o和app, 通过make clean执行clean伪目标, 伪目标不会生成文件因此不会和当前目录下存在的同名clean文件比较新旧导致无法执行命令, 只是一个安全措施. 
    .PHONY:clean
    clean:
        -mkdir /aa #无权限无法创建, 命令前加-表示出错后忽略, 继续执行后面的命令
        rm -f $(obj) $(target)
    

    makefile维护的内部变量
    CPPFLAGS: 预处理器需要的选项 如: -I (预处理包括头文件展开, 宏替换, 取消注释)
    CFLAGS: 编译的时候使用的参数 -Wall -g -c
    LDFLAGS: 链接库使用的选项 -L -l

    相关文章

      网友评论

          本文标题:makefile编写规则

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