Linux Makefile 解析与笔记
2016-07-19 00:50
288 查看
第一个Makefile例子
1.Linux下adc实验的Makefileadc-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所支持后缀名解释
.m | Objective-C原始程序 |
.i | 已经过预处理的C原始程序 |
.ii | 已经过预处理 C++原始程序 |
.S/.s | 汇编语言原始程序 |
.o | 目标文件 |
.a/.so | 编译后的库文件-g 生成带调式信息的可执行文件 |
通过删除可执行文件中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
相关文章推荐
- Linux--管道pipe
- Linux常用指令 2
- linux 命令(1)mkdir
- linux--03
- Linux 平台相关代码的 C++ 解决方案
- Centos7最小安装后ssh连接Connection was reset.问题
- 在Centos上安装redmine
- Linux客户端Xmanager使用技巧
- CentOS6安装jdk和mysql5.7
- VMware内的centos虚拟机无法启动(certmonger启动之后卡住)
- centos的中文支持
- PyQt在64位linux下的编译安装
- linux命令vim常用操作
- Centos安装中文输入法
- Centos 6.5 安装 ant
- centos 基础性命令
- 了解下除国外的windows,linux,mac系统,看下国内的操作系统
- 在 Linux 上使用 VirtualBox 的命令行管理界面
- Linux服务器硬盘空间监控
- Linux 常用命令学习-文件及文件夹操作相关命令-持续更新