Makefile 不常写,但有时候需要写的时候,反而不知道如何下手。现对Makefile 相关收录如下。
Makefile 常用变量
$ @ 目标 ,^ 所有依赖 ,< 第一个依赖
CC c编译器,CXX c++ 编译器,CFLAGS c 编译选项,CXXFLAGS c++编译选项。
Makefile 常规模板,利用makefile 的自动推导依赖
EXEC = MyTarget
CC = gcc
CFLAGS = -g -std=gnu99 -I./include/
LDFLAGS = -ltar -lrt -L./lib/
OBJS = main.o buffer.o test.o
$(EXEC):$(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
clean:
rm $(EXEC) $(OBJS)
以上Makefile 没法检测头文件修改,如果工程大可以用如下Makefile 模板
####################
# $名称: Makefile
# $时间:
####################
#1. 定义可执行文件的名称
TARGET = TestMyTar
#2. 指定此工程所需要头文件路径
INC_PATH = -I. -I./include
LIB_PATH = -L../lib/
LIBS = -lpthread -lrt
#3. 指定cpp 文件的目录
VPATH = .:src
#4. 定义变量包含所有cpp 文件
SRC_PATH = $(foreach dir, $(subst :, ,$(VPATH)), $(wildcard $(dir)/*.cpp))
#5. 定义编译中间文件存放路径
OBJ_DIR = ./obj
OBJ_PATH = $(addrefix $(OBJ_DIR)/, $(subst :, ,$(VPATH)))
#6. 定义链接成目标 所有的obj 文件
OBJS = $(addprefix $(OBJ_DIR)/,$(subst .cpp, .o, $(SRC_PATH)))
#7. 定义依赖文件名称
DEPS = $(OBJS:.o=.o.d)
#8. 创建 obj 文件存放的目录
MAKE_OBJECT_DIR := $(shell mkdir -p $(OBJ_DIR) $(OBJ_PATH))
#9. 定义编译器
CXX = g++
CXXFLAGS = -std=c++11 -g $(INC_PATH)
LDXXFLAGS = $(LIBS) $(LIB_PATH)
#10. 定义目标生成规则
$(TARGET):$(OBJS)
$(CXX) -o $@ $(OBJS) $(LDXXFLAGS)
#11. 定义obj 文件生成规则
$(OBJ_DIR)/%.o : %.cpp
$(CXX) $(CXXFLAGS) -o $@ -c %<
#12. 定义预编译依赖 文件生成规则
$(OBJ_DIR)/%.o.d : %.cpp
@set -e; rm -f $@; \
$(CXX) $< -MM -std=c++11 $(INC_PATH) > $@.$$$$; \
sed 's,.*\.o[ ]*:,$(OBJ_DIR)/$*.o $@ :,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
#13. 引入编译依赖文件
ifneq($(MAKECMDGOALS), clean)
sinclude $(DEPS)
endif
#14. clean
clean:
rm -rf ./obj
rm -rf $(TARGET)
网友评论