您的位置:首页 > 运维架构 > Linux

Linux Makefile 解析与笔记

2016-07-19 00:50 288 查看

第一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: