zoukankan      html  css  js  c++  java
  • Makefile Template

    # 本 makefile 文件适合小型和中型 c/c++ 项目
    # 参考:http://www.partow.net/programming/makefile/index.html
    # 参考:陈皓,《跟我一起写 Makefile》,https://files.cnblogs.com/files/jiahu-Blog/Makefile.pdf
    
    # makefile 中的等号有:`=`、`:=`、`+=` 和 `?=`,具体使用方法参考上面小册子中 ·变量中的变量·
    CXX      := -c++
    CXXFLAGS := -std=c++11 -pedantic-errors -Wall -Wextra -Werror
    LDFLAGS  := -L/usr/lib -lstdc++ -lm
    BUILD    := ./build
    OBJ_DIR  := $(BUILD)/objects
    T_OBJ_DIR:= $(BUILD)/test_objs
    APP_DIR  := $(BUILD)/apps
    TARGET   := program
    T_TARGET := program_test
    INCLUDE  := -Iinclude/ -Iinclude/thirdlib
    
    # wildcard 将指定目录中所有符合规则的文件名展开为列表,文件名之间使用空格分隔
    SRC      :=                       
    	$(wildcard src/module1/*.cpp) 
    	$(wildcard src/module2/*.cpp) 
    	$(wildcard src/module3/*.cpp) 
    	$(wildcard src/*.cpp)         
    
    T_SRC    := $(wildcard test/*.cpp)
    
    # 将 SRC 中满足 %.cpp 模式的文件名转化为 $(OBJ_DIR)/%.o 的形式
    OBJECTS   := $(SRC:%.cpp=$(OBJ_DIR)/%.o)
    T_OBJECTS := $(T_SRC:%.cpp=$(T_OBJ_DIR)/%.o)
    
    # makefile 支持后向依赖,make 会扫描整个 makefile 然后执行,这里的 all 依赖后面的 build
    all: build $(APP_DIR)/$(TARGET)
    
    # 定义模式规则,下面的规则定义了 .cpp 文件生成 .o 文件的方式
    # 第一行指明 OBJ_DIR 目录下 .o 文件的依赖项
    # 第二行起始的 @ 表示执行时当前行不显示在终端
    # 第三行中的 $< 表示所有依赖目标集,即所有的 %.cpp 文件; $@ 表示所有目标集,即所有的 %.o 文件
    $(OBJ_DIR)/%.o: %.cpp
    	@mkdir -p $(@D) 
    	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $< -o $@ $(LDFLAGS)
    
    $(T_OBJ_DIR)/%.o: %.cpp
    	@mkdir -p $(@D) 
    	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $< -o $@ $(LDFLAGS)
    
    # makefile 的普通规则,目标、依赖和命令
    $(APP_DIR)/$(TARGET): $(OBJECTS)
    	@mkdir -p $(@D)
    	$(CXX) $(CXXFLAGS) -o $(APP_DIR)/$(TARGET) $^ $(LDFLAGS)
    
    # makefile 的普通规则,目标、依赖和命令
    $(APP_DIR)/$(T_TARGET): $(OBJECTS) $(T_OBJECTS)
    	@mkdir -p $(@D)
    	$(CXX) $(CXXFLAGS) -o $(APP_DIR)/$(T_TARGET) $^ $(LDFLAGS)
    
    # 伪目标,伪目标只是个标签,make 不会生成相应的文件
    .PHONY: all build clean debug release
    
    build:
    	@mkdir -p $(APP_DIR)
    	@mkdir -p $(OBJ_DIR)
    	@mkdir -p $(T_OBJ_DIR)
    
    debug: CXXFLAGS += -DDEBUG -g
    debug: all
    
    release: CXXFLAGS += -O2
    release: all
    
    test: CXXFLAGS += -DTEST_TSET
    test: build $(APP_DIR)/$(T_TARGET)
    
    clean:
    	-@rm -rvf $(OBJ_DIR)/*
    	-@rm -rvf $(T_OBJ_DIR)/*
    	-@rm -rvf $(APP_DIR)/*
    
  • 相关阅读:
    idea如何使用git关联远程仓库
    项目首次上传至git仓库步骤
    Eclipse 的 Java Web 项目环境搭建
    Postman
    Postman接口测试之POST、GET请求方法
    接口测试3A原则
    使用unittest和ddt进行数据驱动
    每天进步一点点006
    每天进步一点点005
    Selenium2+python自动化1-环境搭建(悠悠课程之路)
  • 原文地址:https://www.cnblogs.com/jiahu-Blog/p/12816743.html
Copyright © 2011-2022 走看看