多文件目录makefile加内核驱动编译模板

目录结构如下
目录结构
第一层 makefile

CC=gcc

SRC_DIR=$(shell pwd)
BUILD_DIR:=$(SRC_DIR)/build

export CC SRC_DIR BUILD_DIR 

all:build lib bin
build:ECHO
	@mkdir -p -m 755 $(BUILD_DIR)

lib:ECHO
	@mkdir -p -m 755 $(BUILD_DIR)/lib
	$(MAKE) -C $(SRC_DIR)/lib CURRENT_DIR=lib
bin:ECHO
	@mkdir -p -m 755 $(BUILD_DIR)/bin
	$(MAKE) -C $(SRC_DIR)/bin CURRENT_DIR=bin

ECHO:
	@echo $(SUBDIRS)

clean:
	$(MAKE) -C $(SRC_DIR)/lib clean
	$(MAKE) -C $(SRC_DIR)/bin clean
	@rm -rf $(BUILD_DIR)/*

lib目录下的makefile

SUBDIRS= $(shell ls -l | grep ^d | awk '{print $$9}')

CUR_SOURCE=$(wildcard *.c)
CUR_OBJS=$(patsubst %.c, %.o, $(CUR_SOURCE))

all:$(SUBDIRS) $(CUR_OBJS) 

$(SUBDIRS):ECHO
	make -C $@
$(CUR_OBJS):%.o:%.c
	$(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@
ECHO:
	echo $(SUBDIRS)
clean:
	for dir in $(SUBDIRS);\
	do $(MAKE) -C $$dir clean||exit 1;\
	done

libtest1目录下 makefile

SHELL = /bin/bash

CFLAGS += -g -fPIC
CFLAGS += -I. -I../../include
CFLAGS += $(EXTRA_FLAGS)

SHARED = -shared -fPIC

TARGET = libtest1.so
TARGET_SRC := $(patsubst %.c, %.o, $(wildcard *.c))

all: clean lib1

lib1:$(TARGET_SRC)
	$(CC) $^ $(SHARED) -o $(TARGET)
	@mv -f $(TARGET) $(BUILD_DIR)/$(CURRENT_DIR)

clean:
	@rm -f *.o */*.o $(TARGET) 



bin目录下makefile

SUBDIRS= $(shell ls -l | grep ^d | awk '{print $$9}')

CUR_SOURCE=$(wildcard *.c)
CUR_OBJS=$(patsubst %.c, %.o, $(CUR_SOURCE))

all:$(SUBDIRS) $(CUR_OBJS) 

$(SUBDIRS):ECHO
	make -C $@
$(CUR_OBJS):%.o:%.c
	$(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@
ECHO:
	echo $(SUBDIRS)
clean:
	for dir in $(SUBDIRS);\
	do $(MAKE) -C $$dir clean||exit 1;\
	done

test目录下makefile

SHELL = /bin/bash

CFLAGS += -g -fPIC
CFLAGS += -I. -I../../include
CFLAGS += $(EXTRA_FLAGS)

SHARE_LIB = -ltest1
LIBPATH = -L $(BUILD_DIR)/lib
LDFLAGS = -Wl,-rpath=$(BUILD_DIR)/lib   //,后面不能加空格
TARGET = test1
TARGET_SRC := $(patsubst %.c, %.o, $(wildcard *.c))

all: clean test
test:$(TARGET_SRC)
	$(CC) $^ -o $(TARGET) $(LIBPATH) $(SHARE_LIB) $(LDFLAGS)
	@mv -f $(TARGET) $(BUILD_DIR)/$(CURRENT_DIR)

clean:
	@rm -f *.o */*.o $(TARGET) 

内核编译模板:
SHELL = /bin/bash

EXTAR_CFLAGS =-I$(SRC_DIR)/include

TARGET_MODULE:module

ifneq ($(KERNELRELEASE),)
	$(TARGET_MODULE)-objs := hello_world.o main.o
	obj-m := $(TARGET_MODULE).o
else
	BUILDSYSTEM_DIR :=/lib/modules/$(shell uname -r)/build
	PWD:=$(shell pwd)
all:
	$(MAKE) -C $(BUILDSYSTEM_DIR) M=$(PWD) modules
clean:
	$(MAKE) -C $(BUILDSYSTEM_DIR) M=$(PWD) clean
install:all
	$(MAKE) -C $(BUILDSYSTEM_DIR) M=$(PWD) modules_install/*临时*/


上一层Makefile  make install
install:
	mkdir -p -m 755 /lib/modules/$(shell uname -r)/extra/hello
	install --v -m 755 $(SRC_DIR)/hello.ko /lib/modules/$(shell uname -r)/extra/hello/
	depmod -a || true

uninstall:
	/bin/rm -rf /lib/modules/$(shell uname -r)/extra/hello/
	depmod -a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值