53 lines
1.5 KiB
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)
|