一.应用程序makefile
文件存放如下
第1种 手动指定搜索目录, .o输出到与.c同样的目录下 (注意复制后要把缩进改成table)
target = app #输出的可执行程序名
CC = gcc #编译器
#指定搜索c文件的路径
SRC = $(wildcard ./*.c)
SRC += $(wildcard ./world/*.c)
SRC += $(wildcard ./kalimdor/*.c)
###################################
OBJ = $(patsubst %.c, %.o, $(SRC))
$(target):$(OBJ)
$(CC) $^ -o $@
.PHONY: clean
clean:
find . -name "*.o" | xargs rm -f
find . -name "$(target)" | xargs rm -f
第2种 用vpath指定搜索路径, .o输出到与Makefile同样的目录下 (注意复制后要把缩进改成table)
CC = gcc
objects = main.o
objects += world.o
objects += hello.o
objects += kalimdor.o
#指定搜索路径
vpath %.c world
vpath %.c kalimdor
##################################
app : $(objects)
$(CC) -o app $(objects)
.PHONY: clean
clean:
find . -name "*.o" | xargs rm -f
find . -name "$(target)" | xargs rm -f
第3种, 指定搜索路径, 将.o输出到指定目录如obj (注意复制后要把缩进改成table)
CC = gcc
target = app
OBJDIR = obj
#头文件搜索路径
INC #INC = -I./dir
#链接库
LINK_LIB #LINK_LIB = dir
source = $(wildcard *.c)
vpath %.c world
source += $(notdir $(wildcard world/*.c))
vpath %.c kalimdor
source += $(notdir $(wildcard kalimdor/*.c))
############################################
objs = $(source:%.c=$(OBJDIR)/%.o)
$(target) : $(objs)
$(CC) -o $@ $^ $(LINK_LIB)
$(objs): $(OBJDIR)/%.o : %.c
@mkdir -p $(OBJDIR)
$(CC) -c $< $(INC) -o $@
.PHONY: show_var
show_var:
@echo $(source)
@echo $(objs)
.PHONY: clean
clean:
find . -name "*.o" | xargs rm -f
find . -name "$(target)" | xargs rm -f
二.驱动程序makefile
第1种,多文件位于同一个文件夹下
KERNELDIR := /home/zuozhongkai/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
CURRENT_PATH := $(shell pwd)
obj-m := chrdevbase_mod.o
chrdevbase_mod-objs := chrdevbase.o hello.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
第2种, 多文件有的位于子文件夹下
KERNELDIR := /home/zuozhongkai/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
CURRENT_PATH := $(shell pwd)
#CURRENT_PATH += $(shell pwd)/kal #无需这行, make会自动找
obj-m := chrdevbase_mod.o
chrdevbase_mod-objs := chrdevbase.o hello.o #模块由多文件组成
chrdevbase_mod-objs += ./kal/kalimdor.o #开发中途追加
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
.PHONY : clean
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean