програмирование
May 11, 2020

Универсальный Makefile

Универсальный Makefile с разделением файлов проекта по подкаталогам

CC := g++

.PHONY: all clean

SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin

EXE := $(BIN_DIR)/current
SRC := $(wildcard $(SRC_DIR)/*.cpp)
OBJ := $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)

CPPFLAGS := -c -Wall -pedantic -Wextra -std=c++11
LDFLAGS := -Llib
LDLIBS := -lm

all: $(EXE)

$(EXE): $(OBJ) | $(BIN_DIR)
        $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
                $(CC) $(CPPFLAGS) -c lt; -o $@

$(OBJ_DIR):
         mkdir $@

$(BIN_DIR):
         mkdir $@

clean:
         $(RM) $(OBJ) $(EXE)