Makefile分目录编写遇到的问题以及解决方法

在进行boost服务端开发时,为了代码组织清晰,作者将文件分到不同目录下,但在编写Makefile时遇到了挑战。文章详细介绍了如何在Makefile中处理多目录下cpp和头文件的编译,特别是如何查找和处理依赖关系,以及解决.o文件生成位置错误和.d文件未更新的问题。通过示例和解释,分享了解决这些问题的具体步骤和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做boost相关的服务端开发,感觉程序多了之后文件夹里面很乱,就想着把他们分在不同的文件夹里面,这样看起来也很舒服,而且也不会很low,毕竟要上传到github上保存版本。给别人看也方便许多。

多目录的Makefile网上有许多教程大多类似,但是实际上应用的时候还是遇见了许多问题。

首先就是从src目录里面搜寻cpp文件,在include目录下面放头文件。找到相应objs目录下的.o文件,最后编译出来我们的主程序下面上我的代码。

CXX = g++


#src obj dep 文件的查找/生成路径

SRC_DIR =  src

OBJ_DIR =  objs

DEPS_DIR = deps


#对cpp文件 头文件进行查找

SRC  = $(wildcard $(SRC_DIR)/*.cpp)

LIBS =  -lpthread  -lboost_system

OBJS = $(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC))))

DEPS =  $(addprefix $(DEPS_DIR)/,$(patsubst %.cpp,%.d,$(notdir $(SRC))))

#MySql编译时需要的依赖

SQL_DEPENDS =  `mysql_config  --cflags  --libs`

BOOST_LIB_DIR = /home/mjf/lib/lib

BOOST_INCLUDE_DIR = /home/mjf/lib/include

HEADER_DIR =  -I ./include   -I/usr/include/mysql  -I$(BOOST_INCLUDE_DIR)

CXXFLAG = $(HEADER_DIR)  -o2  -g  -Wall  -std=c++11

#目标
TARGET = myserver


$(TARGET):$(OBJS)
	$(CXX)  -g  $^   $(SQL_DEPENDS)  -o $(TARGET) $(LIBS)  -L$(BOOST_LIB_DIR)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值