1、编译驱动的Makefile文件模板:
ifneq ($(KERNELRELEASE),)
obj-m := test.o
else
#KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build #for ubuntu
KERNEL_DIR ?= /home/kernel/ # for 内核路径
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *.order *.mod.* *.ko *.symvers
2、编译c/c++文件的Makefile文件模板:
CC=gcc
CXX=g++ -std=c++11
CFLAGS=-Wall -g -O2
ALL=usbtocan
OBJECT=usbtocan.o main.o
LIB=-lpthread
%*.o:%*.cpp
$(CXX) -c $(CFLAGS) $< -o $@ $(LIB)
$(ALL):$(OBJECT)
$(CXX) $(LIB) $(CFLAGS) -o $@ $^
.PHONY:clean
clean:
rm -rf $(ALL) $(OBJECT)
3、带文件夹的文件模板
INC_DIR:=./include
SRC_DIR:=./src
OBJ_DIR:=./obj
BIN_DIR:=./bin
SRC=${wildcard ${SRC_DIR}/*.cpp} #扩展通配符
OBJ=${patsubst %.cpp, ${OBJ_DIR}/%.o,${notdir ${SRC}}} #替换通配符
CC:=g++
CPPFLAGS:=-Wall -lpthread -std=c++11 -I${INC_DIR} #-g -rdynamic
TARGET=server
BIN_TARGET=$(BIN_DIR)/$(TARGET)
$(BIN_TARGET):$(OBJ)
$(CC) $(OBJ) -o $@ $(CPPFLAGS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp
$(CC) $(CPPFLAGS) -c $< -o $@
.PHONY:clean
clean:
find $(OBJ_DIR) -name *.o -exec rm -rf {} \;
(完成)
网友评论