Linux Makefile 解析与笔记

第一个Makefile例子

1.Linux下adc实验的Makefile

adc-test: adc-test.c
	arm-linux-gcc adc-test.c -Wall -O2 -o adc-test
	arm-linux-strip -s adc-test

clean:
	rm adc-test


GCC所支持后缀名解释

.mObjective-C原始程序
.i已经过预处理的C原始程序
.ii已经过预处理 C++原始程序
.S/.s汇编语言原始程序
.o目标文件
.a/.so编译后的库文件-g 生成带调式信息的可执行文件


strip 

通过删除可执行文件中ELF头的 typchk段、符号表、字符串表、行号信息、调试段、注解段、重定位信息等来实现缩减程序体积的目的。

而被剪裁过的可执行文件不可进行还原。

参数

-H 删除文件头(不删除符号表)

-l 删除行号信息

-r 删除调试段、typchk段、符号表(不删除外部符号、静态符号与重定位信息)

-t 删除符号表 (不删除函数符号与行号信息)

-x 删除重定位信息、符号表 (不删除外部符号、静态符号)

-X[mode] 删除文件特定符号信息(mode: 32、64、32_64 | 模式: 32位 、64位、32_64位等符号表)

第二个例子:

CROSS=arm-linux-
all: buttons
buttons: buttons_test.c
	$(CROSS)gcc -o buttons buttons_test.c
clean:
	@rm -vf buttons *.o *~

Makefile 中常见自动变量

$*不包含扩展名的目标文件名称
$+所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$<第一个依赖的名称
$?所有时间戳目标文件晚的依赖文件,并以空格分开
$@目标文件的完整名称
$^所有不重复的依赖文件,以空格分开
$%如果目标是归档成员,则该变量表示目标的归档成员名称

例子

OBJS = main.o 

CC = gcc

CFLAGS = -Wall -O -g

edit :$(objects)

$(CC) $^ -o $@

main.o : main.c defs.h

$(CC) $(CFLAGS) -c $< -o $@


对应的程序为

edit :main.o 

gcc -o edit  main.o

main.o : main.c defs.h

gcc-Wall -O -g -c main.c -o main.o



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值