makefile obj文件路径_makefile将中间文件生成到临时目录

TARGET := test

CC := g++

#注意每行后面不要有空格,否则会算到目录名里面,导致问题

SRC_DIR = src

BUILD_DIR = tmp

OBJ_DIR = $(BUILD_DIR)/obj

DEPS_DIR = $(BUILD_DIR)/deps

#这里添加其他头文件路径

INC_DIR = \

-I./include

#这里添加编译参数

CC_FLAGS := $(INC_DIR) -g

#查找src_dir下面包含子目录的所有cpp文件

SOURCES = $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.cpp))

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

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

$(TARGET):$(OBJS)

$(CC) $^ -o $@

#编译之前要创建OBJ目录,确保目录存在

$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp

if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi;\

$(CC) -c $(CC_FLAGS) -o $@ $<

#编译之前要创建DEPS目录,确保目录存在

#前面加@表示隐藏命令的执行打印

$(DEPS_DIR)/%.d:$(SRC_DIR)/%.cpp

@if [ ! -d $(DEPS_DIR) ]; then mkdir -p $(DEPS_DIR); fi;\

set -e; rm -f $@;\

$(CC) -MM $(CC_FLAGS) $< > $@.$$$$;\

sed 's,\($*\)\.o[ :]*,$(OBJ_DIR)/\1.o $@ : ,g' < $@.$$$$ > $@;\

rm -f $@.$$$$

#前面加-表示忽略错误

-include $(DEPS)

.PHONY : clean

clean:

rm -rf $(BUILD_DIR) $(TARGET)

最终目录结构是这个样子,tmp存放了所有中间文件, 源码在src目录。

直接在根目录执行make就可以了。

root@ubuntu:~/projects/MakeFileProject1# tree . . ├── makefile ├── src │   └── main.cpp ├── test └── tmp     ├── deps     │   └── main.d     └── obj         └── main.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值