嵌入式Linux中Makefile万能写法
对于linux系统中使用gcc进行编译:
# 列出当前目录下所有*.c文件
SRC := $(wildcard *.c)
# 将所有*.c文件转为*.o文件
OBJ := $(patsubst %.c, %.o, $(SRC))
# 指定编译器
CC = gcc
# 指定链接器
CCLINK = g++
# 指定编译属性
CFLAGS = -g -Wall
# 指定编译输出的可执行程序名称
OUTNAME := helloworld
all: $(OBJ)
$(CCLINK) $(CFLAGS) $^ -o $(OUTNAME)
$(OBJ): %.o:%.c
$(CC) $(CFLAGS) -c $^ -o $@
.PHONY:clean
clean:
rm *.o $(OUTNAME)
对于嵌入式linux使用交叉编译器进行编译:
SRC := ${wildcard *.c}
OBJ := ${patsubst %.c, %.o, $(SRC)}
CC = arm-linux-gcc
CCLINK = arm-linux-ld
CFLAGS = -g -c -Wall
all: $(OBJ)
$(CCLINK) -Wall $^ -o all.bin
$(OBJ): %.o:%.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
rm *.o all all.bin
对于linux编译模块:
# 指定模块名称
obj-m := helloworld.o
# 指定内核源码目录
KDIR := /lib/modules/$(shell uname -r)/build
# 指定将编译输出到当前目录
PWD := $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
.PHONY:clean
clean:
make -C $(KDIR) M=$(PWD) modules clean
对于嵌入式linux编译模块:
# 指定模块名称
obj-m := helloworld.o
# 指定编译平台
ARCH := arm
# 指定交叉编译器
CROSS_COMPILE := arm-linux-
# 指定内核源码目录
KDIR := /opt/embeded/dts-demo/linux-4.0.1
# 指定将编译输出到当前目录
PWD := $(shell pwd)
all:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) modules
.PHONY:clean
clean:
make -C $(KDIR) M=$(PWD) modules clean