# pke-at PROJ=pke-at -include config.mk FLAGS_DEBUG = -O0 -g -DDEBUG FLAGS_RELEASE_DEBUG = -O2 -g -DDEBUG FLAGS_RELEASE = -O2 -s -DNDEBUG BUILD_MODE_FLAGS = $(FLAGS_DEBUG) define cc-command $(CC) -std=c2x -c -o $@ $(BUILD_MODE_FLAGS) $(CFLAGS) $(INCS) $< endef define cxx-command $(CXX) -std=c++23 -c -o $@ $(BUILD_MODE_FLAGS) $(CXXFLAGS) $(INCS) $< endef .PHONY: default default: options .WAIT bin/pke-at .PHONY: prepare prepare: ## Set up the current directory to build mkdir -p bin mkdir -p obj .PHONY: options options: prepare .WAIT @echo "$(PROJ)" build options: @echo "CFLAGS = $(CFLAGS)" @echo "CXXFLAGS = $(CXXFLAGS)" @echo "BUILD_MODE_FLAGS = $(BUILD_MODE_FLAGS)" @echo "LDFLAGS = $(LDFLAGS)" @echo "CC = $(CC)" @echo "CXX = $(CXX)" obj/%.o : src/%.c | prepare $(cc-command) obj/%.o : src/%.cpp | prepare $(cxx-command) bin/pke-at: ## Builds the pke-at executable bin/pke-at: obj/pke-at.o $(CXX) -v -std=c++23 $(BUILD_MODE_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@ .PHONY: clean clean: rm -rf bin rm -rf obj rm -rf *.plist .PHONY: help help: ## Prints help for targets with comments @cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'