LINUX Makefile文件模板

 编译驱动的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

编译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)

带文件夹的文件模板

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 {} \;

 

你可能感兴趣的:(Linux,C/C++)