Makefile学习笔记一

本文介绍了Makefile的基本原理和语法,包括目标与依赖、编译命令的编写。针对更换编译器导致的重复修改问题,提出了通过定义变量简化Makefile的方法。文中展示了如何定义和使用变量,以及如何编写通用规则,使得Makefile更具灵活性。此外,还提及了Makefile中常用的特殊符号,如$@、$^和$<的含义。最后,给出了一个具体的简化Makefile示例,用于编译和链接目标文件。
摘要由CSDN通过智能技术生成

Makefile

基本原理: Makefile是一个文本形式的数据库文件,其中包含一些规则来告诉make处理哪些文件以及如何处理这些文件。规则主要描述哪些文件是从哪些文件中产生,以及用什么命令来执行这个过程。依靠规则的描述信息,make对磁盘上的文件进行检查,如果目标文件的生成或被改动的时间(时间戳)至少比它的一个依赖文件还旧,make就执行相应命令,以更新目标文件。

Makefile基本语法: 
 target dependency dependency
 (tab) <command>
: 目标可以是文件,也可以是执行的动作(如clean)
一个最简单原始的Makefile: 

prog:prog1.o prog2.o  
gcc prog1.o prog2.o -o prog  
prog1.o:prog1.c lib.h   
gcc -c -l. -o prog1.o prog2.c  
prog2.o:prog2.c  
gcc -c prog2.c  

问题: 上面的Makefile过于麻烦,如果打算换一个编译器,就要把所有gcc替换为arm-linux-gcc;
解决: 定义与使用
定义: VARNAME=string
使用: ${VARNAME}
简化后的Makfeil: 

OBJS=prog.o code.o
CC=gcc
test:${OBJS}
     ${CC} -o test ${OBJS}
prog.o:prog.c prog.h code.h
     ${CC} -c prog.c -o prog.o
code.o:code.c code.h
     ${CC} -c code.c -c code.o
clean:
     rm -f *.o

 Makefile中常见的三个符号,$@代表目标文件,$^代表所依赖的文件,$<代表第一个依赖的文件

例如:

//arm-linux-ld     是链接命令
//arm-linx-objcopy 复制文件进行格式转换
//arm-linx-objdump 反汇编
led.bin:start.o
        arm-linux-ld -Ttext 0x0 -o led.elf $^
        arm-linux-objcopy -O binary led.elf led.bin
        arm-linux-objdumo -D led.elf > led_elf.dis
        gcc mkv210_image.c -o mkmini210
        ./mkmini210 led.bin 210.bin
%.o:%.s
    arm-linux-gcc -o $@ $< -c 
%.o:%.c
    arm-linux-gcc -o $@ $< -c 

结尾:

  初学Makefile将其分段整理成笔记供自己参考也供与大家学习,如有错误请大佬们直言指出,如果感觉有用那就点个赞留个言,谢谢观众老爷们的赏脸。
  若想获得上述内容的PDF版本移步到GitHub下载。
  地址: https://github.com/QianquanChina/Study-Notes

-----缱绻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值