Makefile (1411B)
1 # Makefile for C projects 2 3 # options 4 CC = clang 5 LINKER = $(CC) 6 CFLAGS = -O0 -pthread -g -std=gnu99 -Wall -Wno-missing-braces -Wno-unused-variable -Wno-switch -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-comment -Wno-typedef-redefinition #-Wfatal-errors 7 LFLAGS = -ldl -lX11 -lXi -lm -lpthread -lavformat -lavcodec -lswscale -lavutil 8 9 TARGET = App 10 11 # directories 12 SRC_DIR = ../../source 13 BIN_DIR = ../../bin 14 INCLUDE = -I../../third_party/include 15 OBJ_DIR = $(BIN_DIR)/.obj 16 17 # finds source files two directories deep 18 SOURCES = $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*/*.c $(SRC_DIR)/modes/*/*.c) 19 OBJECTS = $(SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) 20 DEPENDS = $(SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.d) 21 22 .PHONY: all build run clean 23 24 all: build 25 26 build: $(BIN_DIR) $(DEPENDS) $(BIN_DIR)/$(TARGET) 27 28 $(BIN_DIR): 29 mkdir -p $@ 30 31 # update dependencies 32 $(OBJ_DIR)/%.d : $(SRC_DIR)/%.c 33 @mkdir -p $(@D) 34 @echo -n "Updating dependencies for $< --- " 35 gcc -MM $< -o $@ 36 @sed -i "s/ /\t/" $@; 37 @echo -n "$(@D)/" | cat - $@ > "/tmp/___make_temp" && mv "/tmp/___make_temp" $@ 38 39 # add dependencies 40 include $(DEPENDS) 41 42 # compile 43 $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c 44 @mkdir -p $(@D) 45 $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@ 46 47 # link 48 $(BIN_DIR)/$(TARGET): $(OBJECTS) 49 $(LINKER) $(OBJECTS) $(LFLAGS) -o $@ 50 51 run: build 52 ./$(BIN_DIR)/$(TARGET) 53 54 clean: 55 rm -f $(OBJECTS) $(GS_OBJ) 56 rm -f $(BIN_DIR)/$(TARGET)