• c基础Makefile


    Makefile gcc 测试c编译流程.c->.i->.s->.o->可执行程序

    # a.c->a.i->a.s->a.o->a
    # .i 文件生成 -E(编译过程在预处理结束) gcc -E a.c -o a.i
    # .s 文件生成 -S(编译过程在生成汇编代码结束) gcc -S a.i -o a.s
    # .o 文件生成 -c(编译过程在汇编转为二进制后结束,不进行链接 -m32 生成32位汇编代码) gcc -c a.s -o a.o -m32
    #可执行文件生成 gcc a.o -o a

    a.i: a.c a.h
    gcc -E a.c -o a.i
    a.s: a.i
    gcc -S a.i -o a.s
    a.o: a.s
    gcc -c a.s -o a.o
    a: a.o
    gcc a.o -o a

    # Makefile 规则: 目标文件:依赖文件 a.i: a.c a.h
    # Makefile 变量 变量名=123 $(变量名)
    # Makefile 隐含变量
    # $* 不包括扩展名的目标文件 a.i:a.c a.h $*=a
    # $@ 包括扩展名的全部目标文件 a.i:a.c a.h $@=a.i
    # $^ 所有的当前条目的依赖文件 a.i:a.c a.h $^=a.c a.h
    # $< 第一个依赖文件 a.i:a.c a.h $<=a.c

    # Makefile 函数调用 $(函数名 参数)
    # $(wildcard *.c) --在当前文件夹下查找所有的.c文件
    # $(patsubst %.c,%.o,main.c file.c) --参数 被替换的东西 想要替换成的东西 所有内容

    SRC=$(wildcard *.c)
    OBJ=$(patsubst %.c, %.o, $(SRC))
    CC=gcc

    hello:$(OBJ)
    $(CC) -o $@ $^

    .c.i:
    $(CC) -E -o $*.i $<
    # # .i.s 隐含规则 相当于 %.s:%.i
    .i.s:
    $(CC) -S -o $*.s $<
    .s.o:
    $(CC) -c -o $*.o $<
    .c.o:
    $(CC) -c -o $*.o $<

    #伪指令 后面的命令不进行依赖检查
    .PHONY: clean
    clean:
    rm -rf *.i *.s *.o hello
    test:
    echo $(SRC)
    echo $(OBJ)

    #vars.mk 调试变量 make -f Makefile -f var.mk OBJ
    %:
      @echo '$*=$($*)'
    d-%:
      @echo '$*=$($*)'
      @echo ' origin = $(origin $*)'
      @echo ' value = $(value $*)'
      @echo ' flavor = $(flavor $*)'

  • 相关阅读:
    微信小程序中 数据缓存
    javascript 数组去重方法
    常用网站 ---总结
    vue面试题
    vue创建项目(命令方式)
    shutil 模块:文件复制.移动.压缩.解压.递归删除文件夹
    面向对象一些零散的知识点
    面向对象之多态
    面向对象与继承
    序列化与反序列化的三个模块:json pickle shelve
  • 原文地址:https://www.cnblogs.com/sanmubai/p/16232400.html
Copyright © 2020-2023  润新知