-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathMakefile
87 lines (69 loc) · 1.83 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
MKFILE_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
.DEFAULT_GOAL := install
SHELL := /bin/bash
# Variables
ECHO ?= echo -e
FIND ?= find
BUILD_DIR ?= $(MKFILE_DIR)/_build
OUTPUT_DIR ?= $(MKFILE_DIR)/_output
INSTALL_DIR ?= $(MKFILE_DIR)/_install
CMAKE ?= cmake
CMAKE_OPTIONS ?= \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR)
# make CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=_install"
MAKE ?= make
MAKE_OPTIONS ?= -j$$(nproc)
# Functions
define echo
text="$1"; options="$2"; \
[ -z "$$options" ] && options="1;33"; \
$(ECHO) "\033[$${options}m$${text}\033[0m"
endef
define md
([ -e "$1" ] || (mkdir -p "$1" && $(call echo,MD: $1,33)))
endef
define rm
[ ! -h "$1" ] && [ ! -e "$1" ] || (rm -r "$1" && $(call echo,RM: $1,33))
endef
define rm_f
dir="$2"; [ -e "$${dir}" ] || dir="."; \
$(FIND) "$${dir}" -mindepth 1 -maxdepth 1 -name "$1" | while read -r p; do \
$(call rm,$$p); \
done
endef
# Goals
.PHONY: build
build:
@$(call md,$(BUILD_DIR))
@[ -z $$MY_OUTPUT ] && export MY_OUTPUT=${OUTPUT_DIR}; \
cd $(BUILD_DIR); \
$(CMAKE) $(CMAKE_OPTIONS) ..; \
$(MAKE) $(MAKE_OPTIONS)
.PHONY: install
install: build
@cd $(BUILD_DIR); $(MAKE) install
.PHONY: clean
clean:
@$(call rm,$(BUILD_DIR))
@$(call rm,$(OUTPUT_DIR))
@$(call rm,$(INSTALL_DIR))
.PHONY: cleanall
cleanall:
@for d in $$(find . -maxdepth 2 -name _build -type d); do \
$(call rm,$$d); done
@for d in $$(find . -maxdepth 2 -name _output -type d); do \
$(call rm,$$d); done
@$(call rm,$(INSTALL_DIR))
.PHONY: print
print:
@$(call echo,Make $@)
@echo MKFILE_PATH: $(MKFILE_PATH)
@echo MKFILE_DIR: $(MKFILE_DIR)
@echo SHELL: $(SHELL)
@echo ECHO: $(ECHO)
@echo MAKE: $(MAKE)
@echo MAKE_OPTIONS: $(MAKE_OPTIONS)
@echo CMAKE: $(CMAKE)
@echo CMAKE_OPTIONS: $(CMAKE_OPTIONS)