转自韦东山 嵌入式linux应用开发完全手册
1. 在当前目下建立文件夹为include 和lib 分别放置头文件和实现文件
include : ctype.h* gcclib.h* kernel.h* stdio.h* string.h* system.h* types.h*
lib: ctype.c* div64.S* Makefile* printf.c* string.c* vsprintf.h* div64.h* lib1funcs.S* muldi3.c* printf.h* vsprintf.c*
2.上层makefile为:
CC = arm-linux-gcc
LD = arm-linux-ld
AR = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump
INCLUDEDIR := $(shell pwd)/include @得到当前目录(pwd)下的include目录 :$(函数 参数)格式执行
CFLAGS := -Wall -O2
CPPFLAGS := -nostdinc -I$(INCLUDEDIR) @指定不使用标准头文件,使用-I指定的头文件
LDFLASG := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc @指定使用的库,其中$(..)为提取当前工具链里边gcc库的路径
export CC LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS
objs := head.o init.o nand.o interrupt.o adc_ts.o serial.o main.o lib/libc.a
adc_ts.bin: $(objs)
${LD} -Tadc_ts.lds -o adc_ts_elf $^ ${LDFLASG}
${OBJCOPY} -O binary -S adc_ts_elf $@
${OBJDUMP} -D -m arm adc_ts_elf > adc_ts.dis
.PHONY : lib/libc.a @.PHONY表示是不存在依赖文件的动作
lib/libc.a:
cd lib; make; cd ..
@跳转到当前目录的lib库去执行make命令,再跳转回来(去lib目录执行makefile生成.a库)
%.o:%.c
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
clean:
make clean -C lib
rm -f adc_ts.bin adc_ts_elf adc_ts.dis *.o
3.lib中Makefile 为
objs := div64.o lib1funcs.o ctype.o muldi3.o printf.o string.o vsprintf.o
libc.a: $(objs)
${AR} -r -o $@ $^
%.o:%.c
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
clean:
rm -f libc.a *.o