From 6e1279f92027af2de5deec2462ee5a32cd2587e0 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Mon, 16 Jan 2023 16:42:37 +0100
Subject: [PATCH] Refactor Makefile for maintainability and parallel make

---
 Makefile | 138 ++++++++++++++++++-------------------------------------
 1 file changed, 44 insertions(+), 94 deletions(-)

diff --git a/Makefile b/Makefile
index d5d87c4..64b0b70 100644
--- a/Makefile
+++ b/Makefile
@@ -1,99 +1,49 @@
 SPLFR_PATH=/usr/local/sicstus4.7.1/bin/splfr
 
+methods := \
+	adaboost \
+	approx_kfn \
+	bayesian_linear_regression \
+	dbscan \
+	decision_tree \
+	emst \
+	fastmks \
+	hoeffding_tree \
+	kde \
+	kernel_pca \
+	kfn \
+	kmeans \
+	knn \
+	lars \
+	linear_regression \
+	linear_SVM \
+	lmnn \
+	local_coordinate_coding \
+	logistic_regression \
+	lsh \
+	mean_shift \
+	naive_bayes_classifier \
+	nca \
+	nmf \
+	pca \
+	perceptron \
+	radical \
+	random_forest \
+	softmax_regression \
+	sparse_coding
+clean_methods := $(methods:%=clean-%)
 
-all:
-	@echo "Start compiling!"
-	@echo "AdaBoost!..."
-	$(MAKE) -C src/methods/adaboost splfr=$(SPLFR_PATH)
-	@echo "ApproxKFN!..."
-	$(MAKE) -C src/methods/approx_kfn splfr=$(SPLFR_PATH)
-	@echo "BayesianLinearRegression!..."
-	$(MAKE) -C src/methods/bayesian_linear_regression splfr=$(SPLFR_PATH)
-	@echo "DBScan!..."
-	$(MAKE) -C src/methods/dbscan splfr=$(SPLFR_PATH)
-	@echo "DecisionTree!..."
-	$(MAKE) -C src/methods/decision_tree splfr=$(SPLFR_PATH)
-	@echo "EMST!..."
-	$(MAKE) -C src/methods/emst splfr=$(SPLFR_PATH)
-	@echo "FastMKS!..."
-	$(MAKE) -C src/methods/fastmks splfr=$(SPLFR_PATH)
-	@echo "HoeffdingTree!..."
-	$(MAKE) -C src/methods/hoeffding_tree splfr=$(SPLFR_PATH)
-	@echo "KDE!..."
-	$(MAKE) -C src/methods/kde splfr=$(SPLFR_PATH)
-	@echo "KernelPCA!..."
-	$(MAKE) -C src/methods/kernel_pca splfr=$(SPLFR_PATH)
-	@echo "KFN!..."
-	$(MAKE) -C src/methods/kfn splfr=$(SPLFR_PATH)
-	@echo "KMeans!..."
-	$(MAKE) -C src/methods/kmeans splfr=$(SPLFR_PATH)
-	@echo "KNN!..."
-	$(MAKE) -C src/methods/knn splfr=$(SPLFR_PATH)
-	@echo "LARS!..."
-	$(MAKE) -C src/methods/lars splfr=$(SPLFR_PATH)
-	@echo "LinearRegression!..."
-	$(MAKE) -C src/methods/linear_regression splfr=$(SPLFR_PATH)
-	@echo "LinearSVM!..."
-	$(MAKE) -C src/methods/linear_SVM splfr=$(SPLFR_PATH)
-	@echo "LMNN!..."
-	$(MAKE) -C src/methods/lmnn splfr=$(SPLFR_PATH)
-	@echo "LocalCoordinateCoding!..."
-	$(MAKE) -C src/methods/local_coordinate_coding splfr=$(SPLFR_PATH)
-	@echo "LogisticRegression!..."
-	$(MAKE) -C src/methods/logistic_regression splfr=$(SPLFR_PATH)
-	@echo "LSH!..."
-	$(MAKE) -C src/methods/lsh splfr=$(SPLFR_PATH)
-	@echo "MeanShift!..."
-	$(MAKE) -C src/methods/mean_shift splfr=$(SPLFR_PATH)
-	@echo "NaiveBayesClassifier!..."
-	$(MAKE) -C src/methods/naive_bayes_classifier splfr=$(SPLFR_PATH)
-	@echo "NCA!..."
-	$(MAKE) -C src/methods/nca splfr=$(SPLFR_PATH)
-	@echo "NMF!..."
-	$(MAKE) -C src/methods/nmf splfr=$(SPLFR_PATH)
-	@echo "PCA!..."
-	$(MAKE) -C src/methods/pca splfr=$(SPLFR_PATH)
-	@echo "Perceptron!..."
-	$(MAKE) -C src/methods/perceptron splfr=$(SPLFR_PATH)
-	@echo "Radical!..."
-	$(MAKE) -C src/methods/radical splfr=$(SPLFR_PATH)
-	@echo "RandomForest!..."
-	$(MAKE) -C src/methods/random_forest splfr=$(SPLFR_PATH)
-	@echo "SoftmaxRegression!..."
-	$(MAKE) -C src/methods/softmax_regression splfr=$(SPLFR_PATH)
-	@echo "SparseCoding!..."
-	$(MAKE) -C src/methods/sparse_coding splfr=$(SPLFR_PATH)
+# Must come first so that it's the default target
+.PHONY: all
+all: $(methods)
 
-clean:
-	$(MAKE) -C src/methods/adaboost clean
-	$(MAKE) -C src/methods/approx_kfn clean
-	$(MAKE) -C src/methods/bayesian_linear_regression clean
-	$(MAKE) -C src/methods/dbscan clean
-	$(MAKE) -C src/methods/decision_tree clean
-	$(MAKE) -C src/methods/emst clean
-	$(MAKE) -C src/methods/fastmks clean
-	$(MAKE) -C src/methods/hoeffding_tree clean
-	$(MAKE) -C src/methods/kde clean
-	$(MAKE) -C src/methods/kernel_pca clean
-	$(MAKE) -C src/methods/kfn clean
-	$(MAKE) -C src/methods/kmeans clean
-	$(MAKE) -C src/methods/knn clean
-	$(MAKE) -C src/methods/lars clean
-	$(MAKE) -C src/methods/linear_regression clean
-	$(MAKE) -C src/methods/linear_SVM clean
-	$(MAKE) -C src/methods/lmnn clean
-	$(MAKE) -C src/methods/local_coordinate_coding clean
-	$(MAKE) -C src/methods/logistic_regression clean
-	$(MAKE) -C src/methods/lsh clean
-	$(MAKE) -C src/methods/mean_shift clean
-	$(MAKE) -C src/methods/naive_bayes_classifier clean
-	$(MAKE) -C src/methods/nca clean
-	$(MAKE) -C src/methods/nmf clean
-	$(MAKE) -C src/methods/pca clean
-	$(MAKE) -C src/methods/perceptron clean
-	$(MAKE) -C src/methods/radical clean
-	$(MAKE) -C src/methods/random_forest clean
-	$(MAKE) -C src/methods/softmax_regression clean
-	$(MAKE) -C src/methods/sparse_coding clean
+.PHONY: methods
+$(methods):
+	$(MAKE) -C src/methods/$@ splfr=$(SPLFR_PATH)
 
-	
+.PHONY: $(clean_methods)
+$(clean_methods):
+	$(MAKE) -C src/methods/$(@:clean-%=%) clean
+
+.PHONY: clean
+clean: $(clean_methods)
-- 
GitLab