-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
55 lines (38 loc) · 1.32 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
DESTDIR ?= dist
ZIGS ?= $(foreach lab,$(wildcard */main.zig),$(lab:/main.zig=))
CPPS ?= $(foreach lab,$(wildcard */main.cc),$(lab:/main.cc=))
OUTS := $(foreach lab,$(ZIGS) $(CPPS),$(DESTDIR)/bin/$(lab))
CC ?= gcc
CXX ?= g++
CFLAGS ?= -pedantic-errors -Wall -Wextra -Werror -Ofast
CXXFLAGS ?= $(CFLAGS) -std=c++20
### Phony ######################################################################
.PHONY: all clean clean-%
all: $(DESTDIR)
clean: clean-dist clean-build
clean-dist:
@rm --verbose --recursive --force $(DESTDIR)
clean-build:
@rm --verbose --recursive --force zig-cache
### Build general ##############################################################
$(DESTDIR): $(OUTS)
### Build and run code #########################################################
define mk-zig =
$(DESTDIR)/bin/$(1): $(1)/main.zig
zig build -p $(DESTDIR) -Dlab=$(1)
.PHONY: run-$(1)
run-$(1): $(DESTDIR)/bin/$(1)
zig build run -p $(DESTDIR) -Dlab=$(1)
.PHONY: test-$(1)
test-$(1): $(DESTDIR)/bin/$(1)
zig build test -p $(DESTDIR) -Dlab=$(1)
endef
define mk-cpp =
$(DESTDIR)/bin/$(1): | $(DESTDIR)/bin $(1)/main.cc
$(CXX) $(CXXFLAGS) -o $(DESTDIR)/bin/$(1) $(1)/main.cc
.PHONY: run-$(1)
run-$(1): $(DESTDIR)/bin/$(1)
./$(DESTDIR)/bin/$(1)
endef
$(foreach lab,$(ZIGS),$(eval $(call mk-zig,$(lab))))
$(foreach lab,$(CPPS),$(eval $(call mk-cpp,$(lab))))