-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
80 lines (61 loc) · 1.95 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#########################
## GENERAL SETTINGS ##
#########################
# Color code
BOLD_B=\033[1m
BOLD_E=\033[0m
RED=\033[0;31m
GREEN=\033[0;32m
NC=\033[0m
# Macro for better display
PRINT_NAME=@printf "%30s\t" $<
PRINT_STATUS=@if [ $$? -eq 0 ]; then echo -e '$(GREEN)$(BOLD_B)[SUCCESS]$(BOLD_E)$(NC)'; else echo -e '$(RED)$(BOLD_B)[FAIL]$(BOLD_E)$(NC)'; fi
PRINT_PROCESS_NAME=@printf "\n%30s\t" $@
# Name of source, include and object folder (relative to Makefile path)
SOURCES_DIR=src
INCLUDE_DIR=include
OBJECTS_DIR=bin
# Reference to source and object files.
SOURCES=$(wildcard $(SOURCES_DIR)/*.cpp)
OBJECTS=$(patsubst $(SOURCES_DIR)/%.cpp,$(OBJECTS_DIR)/%.o,$(SOURCES))
#########################
## PROJECT SETTINGS ##
#########################
# THIS PART HAS TO BE MODIFIED IN ORDER TO FIT YOUR PROJECT. CHECK README FOR MORE INFORMATION.
# Compiler
CXX= clang++
# Compilation flags
CXXFLAGS= -c -Wall -Wextra -std=c++17 -O3
# Module FFMpeg
INCLUDE_MODULE_FFMPEG=
LINK_MODULE_FFMPEG= -lavcodec -lavformat -lavutil -lswscale
# Module OpenCV
INCLUDE_MODULE_OPENCV= `pkg-config --cflags opencv4`
LINK_MODULE_OPENCV= `pkg-config --libs opencv4`
# Include and link flags based on INCLUDE_DIR (default) and modules defined previously
INCLUDE_FLAGS= -I$(INCLUDE_DIR) $(INCLUDE_MODULE_OPENCV)
LDFLAGS= $(LINK_MODULE_FFMPEG) $(LINK_MODULE_OPENCV)
# Name of the executable/library
PROCESS_NAME= VideoStreamDecoder
# Logfile containing compilation log
LOGFILE=build.log
##################
## BUILD STEP ##
##################
.PHONY: all
.ONESHELL:
all: CLEAN_BEFORE_BUILD $(PROCESS_NAME)
$(PROCESS_NAME): $(OBJECTS)
@$(PRINT_PROCESS_NAME)
@$(CXX) $(LDFLAGS) $^ -o $@ >> $(LOGFILE) 2>&1
@$(PRINT_STATUS)
$(OBJECTS_DIR)/%.o: $(SOURCES_DIR)/%.cpp
@$(PRINT_NAME)
@$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) $< -o $@ >> $(LOGFILE) 2>&1
@$(PRINT_STATUS)
.PHONY: clean
clean: CLEAN_BEFORE_BUILD
@rm -f $(OBJECTS)
CLEAN_BEFORE_BUILD:
@rm -f $(LOGFILE)
@rm -f $(PROCESS_NAME)