EXEC = simple simplecpp # set up CFLAGS / CXXFLAGS CFLAGS = -std=c17 -Wmissing-declarations -Wall -Wextra -MMD ifdef DEBUG CFLAGS += -O0 -g -fsanitize=address,undefined else CFLAGS += -O3 -DNDEBUG endif # Add -fpic only for non-Windows platforms ifneq ($(OS), Windows_NT) CFLAGS += -fpic endif CXXFLAGS = $(subst -std=c17,-std=c++20,$(CFLAGS)) # Test if C++ is available HAVE_CXX := $(shell command -v $(CXX) 2> /dev/null) # Test for C++20 support CXX20_SUPPORT := $(shell echo "int main(){}" | $(CXX) -std=c++20 -x c++ -c - -o /dev/null 2>/dev/null && echo yes || echo no) all: $(EXEC) simple: simple.c ../src/libtomlc17.a $(CC) $(CFLAGS) -o $@ $@.c -L../src -ltomlc17 repro: repro.c ../src/libtomlc17.a $(CC) $(CFLAGS) -o $@ $@.c -L../src -ltomlc17 simplecpp: simplecpp.cpp ../src/libtomlc17.a ifndef HAVE_CXX @echo "INFO: skipping $@ because no $(CXX) compiler found" else ifeq ($(CXX20_SUPPORT),no) @echo "INFO: skipping $@ because $(CXX) does not support C++20" else $(CXX) $(CXXFLAGS) -o $@ $@.cpp -L ../src -l tomlc17 endif -include simple.d simplecpp.d test: all ./simple > /dev/null [ ! -x ./simplecpp ] || ./simplecpp > /dev/null clean: rm -f *.o *.d *.a $(EXEC) distclean: clean format: clang-format -i *.[ch] *.cpp .PHONY: all clean distclean format