zoukankan      html  css  js  c++  java
  • 如何编写一个简单的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

    其中:

    $^ 所有依赖目标的集合

    $@ 规则中的目标文件集

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

  • 相关阅读:
    优秀网站推荐
    本机号码一键登录
    基金配置#通过且慢分析基金相关性
    开源didi kafka-manager使用
    多线程编程解决思路
    jsoup选择器
    codeman的角色权限显隐
    html页面跳转带中文参数,乱码
    idea代码查看当前项目占用内存
    阿里云oss上传———通过MultipartFile,springmvc模式
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3514441.html
Copyright © 2011-2022 走看看