makefile编译有多个类的c++工程

    工程文件夹下有 bin,obj,src,include文件夹,类的定义.h文件在include文件夹下,类的实现.cpp在src文件夹下。main函数在根目录的main.cpp文件中。编译时将.o编译到obj文件夹下,将可执行文件编译到bin文件夹下。

DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_BIN = ./bin

SRC =  $(wildcard ${DIR_SRC}/*.cpp)
OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) main.cpp

TARGET = main

BIN_TARGET = ${DIR_BIN}/${TARGET}

CC = g++
CFLAGS = -g -Wall -I${DIR_INC}

${BIN_TARGET}:${OBJ}
    $(CC) $(OBJ) -o $@
${DIR_OBJ}/%.o:${DIR_SRC}/%.cpp
    $(CC) $(CFLAGS) -c  $< -o $@
.PHONY:clean
clean:
    rm -rf ${DIR_OBJ}/*.o

(1)Makefile中的 符号 $@, $^, $< 的意思:
  $@  表示目标文件
  $^  表示所有的依赖文件
  $<  表示第一个依赖文件
  $?  表示比目标还要新的依赖文件列表

(2)wildcard、notdir、patsubst的意思:

  wildcard : 扩展通配符
  notdir : 去除路径
  patsubst :替换通配符


留言: