小程序通用Makefile

有时候经常需要写一些小的测试用例,有一个Makefile会比较方便。于是就想到写一个比较通用的Makefile。

github地址:https://github.com/RichardUSTC/general-makefile

这个Makefile的特点:

  • 支持C和C++程序
  • 每个C/C++源文件编译成一个可执行程序
  • 根据需要,可以通过make dump来dump出可执行程序的汇编代码,编译分析
  • make时可以在命令行指定CC、CXX、CFLAGS、CXXFLAGS、LDFLAGS、LIBS、OBJDUMP和DUMP_FLAGS变量。例如make LIBS=-lpthread。注意这时等号两侧不能有空格
  • 编译出来的程序带有调试信息
  • 使用时,放在源码所在目录即可
    CC = gcc
    CXX = g++
    OBJDUMP = objdump
    
    INCLUDES +=
    CFLAGS += -g
    CXXFLAGS += -g
    LDFLAGS +=
    LIBS +=
    DUMP_FLAGS = -d
    
    ifneq (${INCLUDES}, )
        CFLAGS += -I${INCLUDES}
        CXXFLAGS += -I${INCLUDES}
    endif
    
    
    C_SRC = $(wildcard *.c)
    C_TARGET = $(patsubst %.c, %, ${C_SRC})
    C_DUMP= $(patsubst %.c, %.dump, ${C_SRC})
    CPP_SRC = $(wildcard *.cpp)
    CPP_TARGET = $(patsubst %.cpp, %, ${CPP_SRC})
    CPP_DUMP= $(patsubst %.cpp, %.dump, ${CPP_SRC})
    TARGET = ${C_TARGET} ${CPP_TARGET}
    DUMP = ${C_DUMP} ${CPP_DUMP}
    
    all: ${TARGET}
    
    dump: ${DUMP} ${TARGET}
    
    clean:
        @rm -f ${TARGET} ${DUMP}
    
    ${C_TARGET}: %: %.c
        ${CC} -o $@ $< ${CFLAGS} ${LDFLAGS} ${LIBS}
    
    ${CPP_TARGET}: %: %.cpp
        ${CXX} -o $@ $< ${CXXFLAGS} ${LDFLAGS} ${LIBS}
    
    ${DUMP}: %.dump: %
        ${OBJDUMP} ${DUMP_FLAGS} $< > $@
原文地址:https://www.cnblogs.com/richardustc/p/3028988.html