CXX := clang++ CXXFLAGS := -Wall -Wextra -std=c++17 CC := clang CFLAGS := -Wall -Wextra INCLUDES := -I./src/ \ -I./vendor/glad/include/ \ -I./vendor/glm/ \ -I./vendor/imgui/ \ -I./vendor/imgui/backends/ \ -I./vendor/stb/ \ -I./vendor/tinyobjloader/ \ LDFLAGS := -lglfw -lGL -lm TARGET := build/fan OBJS := build/camera.o \ build/framebuffer.o \ build/loader.o \ build/main.o \ build/material.o \ build/mesh.o \ build/renderer.o \ build/scene.o \ build/shader.o \ build/texture.o \ build/transform.o \ build/utils.o \ build/window.o \ build/glad.o \ build/stb_image.o \ build/tiny_obj_loader.o \ IMGUI_OBJS := build/imgui.o build/imgui_demo.o build/imgui_draw.o build/imgui_tables.o build/imgui_widgets.o \ build/imgui_impl_glfw.o build/imgui_impl_opengl3.o .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) $(IMGUI_OBJS) $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) build/%.o: src/%.cpp $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ build/glad.o: vendor/glad/src/gl.c $(CC) $(CFLAGS) -I./vendor/glad/include/ -c $< -o $@ build/stb_image.o: vendor/stb/stb_image.h $(CC) $(CFLAGS) -DSTB_IMAGE_IMPLEMENTATION -xc -c $< -o $@ build/tiny_obj_loader.o: vendor/tinyobjloader/tiny_obj_loader.h $(CXX) $(CXXFLAGS) -DTINYOBJLOADER_IMPLEMENTATION -xc++ -c $< -o $@ define imgui_rule build/$(1): vendor/imgui/$(2) $(CXX) $(CXXFLAGS) -I./vendor/imgui/ -c $$< -o $$@ endef $(eval $(call imgui_rule,imgui.o,imgui.cpp)) $(eval $(call imgui_rule,imgui_demo.o,imgui_demo.cpp)) $(eval $(call imgui_rule,imgui_draw.o,imgui_draw.cpp)) $(eval $(call imgui_rule,imgui_tables.o,imgui_tables.cpp)) $(eval $(call imgui_rule,imgui_widgets.o,imgui_widgets.cpp)) $(eval $(call imgui_rule,imgui_impl_glfw.o,backends/imgui_impl_glfw.cpp)) $(eval $(call imgui_rule,imgui_impl_opengl3.o,backends/imgui_impl_opengl3.cpp)) clean: rm -f build/*.o $(TARGET)