25 lines
813 B
Makefile
25 lines
813 B
Makefile
|
|
# Builds every .cpp in this tree into a binary next to its source.
|
||
|
|
# Incremental: a file is recompiled only when its .cpp is newer than its binary.
|
||
|
|
# Flags come from the compile_flags.txt nearest the source (the file clangd
|
||
|
|
# reads), falling back to the one at the repo root.
|
||
|
|
CXX := clang++
|
||
|
|
ROOT := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
||
|
|
SRCS := $(shell find $(ROOT) -name '*.cpp')
|
||
|
|
BINS := $(basename $(SRCS))
|
||
|
|
|
||
|
|
# The `@:` recipe is a deliberate no-op. Without it, make prints
|
||
|
|
# "Nothing to be done for 'all'" whenever everything is already up to date.
|
||
|
|
all: $(BINS)
|
||
|
|
@:
|
||
|
|
|
||
|
|
%: %.cpp
|
||
|
|
@flags=$$(cat $(dir $<)compile_flags.txt 2>/dev/null || cat $(ROOT)compile_flags.txt 2>/dev/null); \
|
||
|
|
echo "compiling $(notdir $<)"; \
|
||
|
|
$(CXX) $$flags $< -o $@
|
||
|
|
|
||
|
|
clean:
|
||
|
|
@rm -f $(BINS)
|
||
|
|
@echo "cleaned"
|
||
|
|
|
||
|
|
.PHONY: all clean
|