makefile模板

直接上我的makefile万能模板

CC=g++
#CFLAGS= -O3 -g0 -Wall -std=c++11
CFLAGS= -O0 -g3 -Wall -DBOOST_LOG_DYN_LINK
# -DBOOST_LOG_USE_COMPILER_TLS -std=c++11
INCLUDES=-I/usr/local/include -I$(SRC_PATH)
LIBS=-L/usr/local/lib -lboost_log -lboost_log_setup -lboost_thread -lboost_system -lrt -lpthread 	-lopencv_core -lopencv_highgui -lopencv_imgproc

OBJ_PATH=build
SRC_PATH=src

SRC_DIRS := $(shell find $(SRC_PATH)/* -type d)//获取目录的路径 这是关于find的用法
OBJ_DIRS := $(SRC_DIRS:$(SRC_PATH)/%=$(OBJ_PATH)/%)//目录获取后这一句生成在目标目录下构建src	下的目录 并且是字符串的形式
MKDIR := mkdir -p
RM := rm -rf
$(info 'src_dirs = ' $(SRC_DIRS))//打印
$(info 'obj_dirs = ' $(OBJ_DIRS))

SRC := $(shell find $(SRC_PATH) -name *.cc)
OBJ := $(SRC:$(SRC_PATH)/%.cc=$(OBJ_PATH)/%.o)//在目标目录创建与src对应的.o文件
OBJ_SERVER += $(filter-out $(OBJ_PATH)/client/%.o, $(OBJ))//可以根据需求过滤不需要的.o
OBJ_CLIENT += $(filter-out $(OBJ_PATH)/server/%.o, $(OBJ))
$(info "obj_client = " $(OBJ_CLIENT))
$(info "obj_server = " $(OBJ_SERVER))

all: directories $(OBJ) $(OBJ_PATH)/tcp_client $(OBJ_PATH)/tcp_server//all是一个目标集 后面的三个对象是三个编译对象,编译对象可以在之后自己写编译规则

directories:
	$(MKDIR) $(OBJ_DIRS)

$(OBJ_PATH)/tcp_client:$(OBJ_CLIENT) $(OBJ_PATH)/server/tcp_server.o
	$(CC) $(CFLAGS) $^ -o $@ $(LIBS)//链接

$(OBJ_PATH)/tcp_server:$(OBJ_SERVER)
	$(CC) $(CFLAGS) $^ -o $@ $(LIBS)//链接

$(OBJ_PATH)/%.o:$(SRC_PATH)/%.cc
	$(CC) $(CFLAGS) $< -o $@ $(INCLUDES) -c//编译

clean:
	$(RM) $(OBJ_PATH)/*

解释说明

我的应用环境是有一个build文件夹,一个src文件夹,src里有不同的分类文件夹,这些文件夹里就是不同作用的文件了。
主目录的长这样
在这里插入图片描述src下长这样
在这里插入图片描述make后的build长这样
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值