Files
oki/cli/Makefile

53 lines
1.5 KiB
Makefile

# Arguments pour la compilation
CXX := g++
CXXFLAGS := -std=c++20 \
-Wall -Wextra \
-Wno-redundant-move \
-Wnon-virtual-dtor \
-Wsuggest-override \
-pedantic \
-g -MMD -MP \
-fdiagnostics-color=always
LDLIBS := -lcurl -lminizip # Bibliothèques utilisées pour l'édition des liens
# Nom de l'exécutable final
TARGET_EXE := oki
# Répertoires des fichiers compilés et de sources
BUILD_DIR := build
SRC_DIR := src src/cli src/config src/io src/package src/repository
# Répertoires où rechercher les fichiers header
CPPFLAGS=-Ithird-party
# Liste tous les fichiers sources .cpp
sources := $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.cpp))
# Déduit tous les fichiers objets .o à partir du nom des fichiers sources
objets := $(sources:src/%.cpp=$(BUILD_DIR)/%.o)
# Déduit tous les fichiers dépendances .o à partir des fichiers objets
dependances := $(objets:.o=.d)
all: $(TARGET_EXE)
# Créé l'exécutable final avec tous les fichiers objets
$(TARGET_EXE): $(objets)
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)
# Définit la compilation des fichiers C++
# Le dossier de build est créé s'il n'existe pas encore
$(BUILD_DIR)/%.o: src/%.cpp | $(BUILD_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
# Créé le répertoire de build
$(BUILD_DIR):
mkdir -p $(subst src,$(BUILD_DIR),$(SRC_DIR))
# Supprime tous les fichiers issus de la compilation
.PHONY: clean
clean:
rm -rf $(BUILD_DIR) $(TARGET_EXE)
# Inclut les Makefiles de chaque fichier source
# Le - permet d'ignorer les Makefiles manquants
-include $(dependances)