SHELL := /bin/bash .DEFAULT_GOAL := help .PHONY: init clean help build test clean debug release buildr buildd install example f_release = build_Release f_debug = build_Debug define ClearTests @for t in $(test_targets); do \ if [ -f $(f_debug)/tests/$$t ]; then \ echo ">>> Cleaning $$t..." ; \ rm -f $(f_debug)/tests/$$t ; \ fi ; \ done @nfiles="$(find . -name "*.gcda" -print0)" ; \ if test "${nfiles}" != "" ; then \ find . -name "*.gcda" -print0 | xargs -0 rm 2>/dev/null ;\ fi ; endef init: ## Initialize the project installing dependencies @echo ">>> Installing dependencies" @vcpkg install @echo ">>> Done"; clean: ## Clean the project @echo ">>> Cleaning the project..." @if test -f CMakeCache.txt ; then echo "- Deleting CMakeCache.txt"; rm -f CMakeCache.txt; fi @for folder in $(f_release) $(f_debug) vpcpkg_installed install_test ; do \ if test -d "$$folder" ; then \ echo "- Deleting $$folder folder" ; \ rm -rf "$$folder"; \ fi; \ done $(call ClearTests) @echo ">>> Done"; buildd: ## Build the debug targets @cmake --build $(f_debug) --parallel buildr: ## Build the release targets @cmake --build $(f_release) --parallel debug: ## Build a debug version of the project with BayesNet from vcpkg @echo ">>> Building Debug Platform..."; @if [ -d ./$(f_debug) ]; then rm -rf ./$(f_debug); fi @mkdir $(f_debug); @cmake -S . -B $(f_debug) -D CMAKE_BUILD_TYPE=Debug -D ENABLE_TESTING=ON -D CODE_COVERAGE=ON -D CMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake @echo ">>> Done"; release: ## Build a Release version of the project with BayesNet from vcpkg @echo ">>> Building Release Platform..."; @if [ -d ./$(f_release) ]; then rm -rf ./$(f_release); fi @mkdir $(f_release); @cmake -S . -B $(f_release) -D CMAKE_BUILD_TYPE=Release -D CMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake @echo ">>> Done"; opt = "" test: ## Run tests (opt="-s") to verbose output the tests, (opt="-c='Test Maximum Spanning Tree'") to run only that section @echo ">>> Running Platform tests..."; @$(MAKE) clean @$(MAKE) debug @cmake --build $(f_debug) -t $(test_targets) --parallel @for t in $(test_targets); do \ if [ -f $(f_debug)/tests/$$t ]; then \ cd $(f_debug)/tests ; \ ./$$t $(opt) ; \ fi ; \ done @echo ">>> Done"; example: ## Build sample @echo ">>> Building Sample..."; @cmake --build $(f_release) -t sample $(f_release)/sample/PlatformSample --model BoostAODE --dataset $(fname) --discretize --stratified @echo ">>> Done"; help: ## Show help message @IFS=$$'\n' ; \ help_lines=(`grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ printf "%s\n\n" "Usage: make [task]"; \ printf "%-20s %s\n" "task" "help" ; \ printf "%-20s %s\n" "------" "----" ; \ for help_line in $${help_lines[@]}; do \ IFS=$$':' ; \ help_split=($$help_line) ; \ help_command=`echo $${help_split[0]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ help_info=`echo $${help_split[2]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ printf '\033[36m'; \ printf "%-20s %s" $$help_command ; \ printf '\033[0m'; \ printf "%s\n" $$help_info; \ done