Makefile
==========================
如果需要编译多个.s或.c文件,最好通过Makefile对文件的编译、安装、删除等进行管理。
最简单的makefile如下:
$>vim Makefile
hello:hello.c
arm-linux-gcc -o hello hello.c
clean:
rm -f hello
(1)基本格式
-------------------------
目标(target) : 依赖(depedence)
命令(command)
(2)通用的Makefile
-------------------------
$>vim Makefile
src := $(shell ls *.c)
obj := $(patsubst %.c, %.o, $(src))
test: $(obj)
arm-linux-ld -o $@ $^
%.o: %.c
arm-linux-gcc -c -o $@ $<</div>
clean:
rm -f test $(elf)
上面的$@,$^以及$<为自动变量。
$@表示规则的目标文件名;
$^表示所有依赖的名字,名字之间用空格隔开;
$<表示第一个依赖的文件名
%为通配符,和一个字符串中任意个数的字符相匹配
(3)Makefile的例子
--------------------
如果当前要编译一个c文件mov.c和一个汇编文件mov_asm.s,Makefile的内容如下:
TARGET := mymov
SRC_A := $(shell ls *.s)
SRC_C := $(shell ls *.c)
OBJ_A := $(patsubst %.s, %.o, $(SRC_A))
OBJ_C := $(patsubst %.c, %.o, $(SRC_C))
CROSS := arm-linux-
CC := $(CROSS)gcc
AS := $(CROSS)as
CFLAGS += -march=armv7-a -static
all: $(OBJ_A) $(OBJ_C)
$(CC) $(CFLAGS) $^ -o $(TARGET)
%.o:%.s
$(AS) $< -o $@
%.o:%.c
$(CC) -c $< -o $@
install:
adb remount
adb push $(TARGET) /system/bin/
clean:
rm -f $(OBJ_A) $(OBJ_C) $(TARGET)
测试:
$>make //生成elf格式的程序mymov
$>make install //将该程序安装到开发板上
$>make clean