TARGET_EXEC := test BUILD_DIR := ./build SRC_DIRS := ./src # False targets # (these are the only ones you manually run) all: $(TARGET_EXEC) run: all ./$(TARGET_EXEC) clean: -rm -r $(BUILD_DIR) @echo "" libs: $(BUILD_DIR)/hid.o .PHONY: clean all run libs ################################################# # Flags and autodetection # -MMD and -MP generate makefiles with extension .d. CPPFLAGS := -Wall -MMD -MP -I src -I libs/hidapi/hidapi LDFLAGS := -l fftw3 -l udev # Find all cpp files in source dirs SRCS := $(shell find $(SRC_DIRS) -name '*.cpp') # Turns ./build/a.cpp into ./build/a.cpp.o OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) LIB_OBJS := $(BUILD_DIR)/hid.o # Turns ./build/a.cpp.o into ./build/a.cpp.d DEPS := $(OBJS:.o=.d) ################################################# # Build targets HIDAPI_PATH := libs/hidapi # Build hidapi $(BUILD_DIR)/hid.o: @mkdir -p $(BUILD_DIR) @echo "Compiling hid.o" @gcc -Wall -g -fpic -c \ -I $(HIDAPI_PATH)/hidapi \ `pkg-config libusb-1.0 --cflags` \ \ $(HIDAPI_PATH)/linux/hid.c \ -o $(BUILD_DIR)/hid.o # C++ build step $(BUILD_DIR)/%.cpp.o: %.cpp $(BUILD_DIR)/hid.o mkdir -p $(dir $@) g++ $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ # Final build step $(TARGET_EXEC) : $(OBJS) g++ $(OBJS) $(LIB_OBJS) -o $@ $(LDFLAGS) # Include generated makefiles -include $(DEPS)