• 如何编写一个简单的makefile


    一个规则的构成

    目标:依赖1,依赖2······
    
           命令

    例子:

    objs := init.o nand.o head.o  main.o
    
    nand.bin : $(objs)
        arm-linux-ld -Tnand.lds -o nand_elf $^
        arm-linux-objcopy -O binary -S nand_elf $@
        arm-linux-objdump -D -m arm  nand_elf > nand.dis 
    
    %.o:%.c
        arm-linux-gcc -Wall -c -O2 -o $@ $<
    
    %.o:%.S
        arm-linux-gcc -Wall -c -O2 -o $@ $<
    
    clean:
        rm -f  nand.dis nand.bin nand_elf *.o

    解释:

    (1)objs变量可以起到“宏”的作用,引用变量时,用$(objs)。

    (2)最终目标为nand.bin,它的依赖为init.o nand.o head.o  main.o。

    (3)表示把所有的c语言文件用arm-linux-gcc生成对应的o文件。

    %.o:%.c
           arm-linux-gcc -Wall -c -O2 -o  $@  $<

    (4)表示把所有的s语言文件用arm-linux-gcc生成对应的o文件。

    %.o:%.s
           arm-linux-gcc -Wall -c -O2 -o $@ $<

    (5)表示arm-linux-ld以链接脚本nand.lds为规则,将init.o nand.o head.o  main.o链接生成一个nand_elf的文件。

    arm-linux-ld -Tnand.lds -o nand_elf $^ 

    (6)表示将nand_elf文件转换成bin文件。

    arm-linux-objcopy -O binary -S nand_elf $@ 

    (7)表示将nand_elf转换生成nand.dis的反汇编文件。

    arm-linux-objdump -D -m arm  nand_elf > nand.dis

    其中:

    $^ 所有依赖目标的集合

    $@ 规则中的目标文件集

    $< 依赖中第一个目标的名字。 

  • 相关阅读:
    Haproxy基于ACL做访问控制
    K8s之Prometheus监控
    kubernetes之PV及PVC案例
    K8s常见示例
    K8s之Web服务
    Ansible 部署k8s
    K8s之网络通信
    创建资源对象实例
    kubeadm搭建K8s集群
    Go基础之函数递归实现汉诺塔
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3514441.html
Copyright © 2020-2023  润新知