码迷,mamicode.com
首页 > 其他好文 > 详细

自己写makefile

时间:2019-12-28 23:09:07      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:++   hello   定义   ddp   target   程序   自动   ase   项目   

目录结构

由于只是用来编译简单的小型程序,所以目录尽量简洁:

#.
#├── bin
#├── .dep
#├── makefile
#├── obj
#└── src

这里用户需要创建的就只有src目录,里面放入项目.h.cpp文件。

自动生成头文件依赖

利用g++命令中推导头文件依赖的功能生成每个.cpp文件对应的.d依赖文件,再将.d依赖文件include到makefile文件中,实现对依赖头文件的检测。
具体原理见:Auto-Dependency Generation

debug和release

生成release版命令:make
生成debug版命令:make debug
要注意的是debug版和release版共享目录,所以做切换的时候需要先make clean一下

makefile

#目录结构
#.
#├── bin
#├── .dep
#├── makefile
#├── obj
#└── src

#获取当前的makefile所在的目录绝对路径
#MAKEFILE_LIST是make工具定义的环境变量,最后一个值就是当前的makefile的启动路径(可能是相对路径)
TOP_DIR := $(patsubst %/, %, $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))

#各项目录
BIN_DIR := $(TOP_DIR)/bin
DEP_DIR := $(TOP_DIR)/.dep
OBJ_DIR := $(TOP_DIR)/obj
SRC_DIR := $(TOP_DIR)/src

#编译器,链接器
CXX := g++
LD := g++

#生成依赖文件选项
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d

#编译选项
CXXFLAGS := -std=c++11 -Wall -m64

#宏定义
MACROS :=

#链接选项
LDFLAGS :=

#包含的头文件和库文件
INCS :=
LIBS :=

#源文件以及中间目标文件和依赖文件
SRCS := $(notdir $(wildcard $(SRC_DIR)/*.cpp))
OBJS := $(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SRCS)))
DEPS := $(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d, $(SRCS)))

#最终目标文件
TARGET := $(BIN_DIR)/hello

#默认最终目标
.PHONY : all
all : $(TARGET)

#debug最终目标
.PHONY : debug
debug : CXXFLAGS += -g
debug : $(TARGET)

#生成最终目标
$(TARGET) : $(OBJS) | $(BIN_DIR)
    $(LD) $(LDFLAGS) $(LIBS) -o $@ $^

#若没有bin目录则自动生成
$(BIN_DIR) :
    mkdir -p $@

#生成中间目标文件(release版)
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR)
    $(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(MACROS) -o $@ $<

#若没有obj目录则自动生成
$(OBJ_DIR) :
    mkdir -p $@

#若没有.dep目录则自动生成
$(DEP_DIR) :
    mkdir -p $@

#依赖文件会在生成中间文件的时候自动生成,这里只是为了防止报错
$(DEPS) :

#引入中间目标文件头文件依赖关系
include $(wildcard $(DEPS))

#删除makefile创建的目录
.PHONY : clean
clean :
    rm -rf $(BIN_DIR) $(OBJ_DIR) $(DEP_DIR)

自己写makefile

标签:++   hello   定义   ddp   target   程序   自动   ase   项目   

原文地址:https://www.cnblogs.com/HachikoT/p/12113022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!