CPP03 1.0
読み取り中…
検索中…
一致する文字列を見つけられません
Makefile
[詳解]
1# **************************************************************************** #
2# #
3# ::: :::::::: #
4# Makefile :+: :+: :+: #
5# +:+ +:+ +:+ #
6# By: kamitsui <kamitsui@student.42tokyo.jp> +#+ +:+ +#+ #
7# +#+#+#+#+#+ +#+ #
8# Created: 2025/03/15 19:38:29 by kamitsui #+# #+# #
9# Updated: 2025/05/16 14:55:54 by kamitsui ### ########.fr #
10# #
11# **************************************************************************** #
12
13# @file ex01/Makefile
14# @brief This File is a Makefile for building Fixed class in ex01 directory.
15
16# Directories
17OBJ_DIR = objs
18DEP_DIR = .deps
19
20# Source files
21SRCS = main.cpp ClapTrap.cpp ScavTrap.cpp
22
23# Object files and dependency files
24OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o))
25DEPS = $(addprefix $(DEP_DIR)/, $(SRCS:.cpp=.d))
26
27# Build target
28NAME = a.out
29
30# Compiler
31CXX = c++
32CXXFLAGS = -Wall -Wextra -Werror -std=c++98
33CF_DEP = -MMD -MP -MF $(@:$(OBJ_DIR)/%.o=$(DEP_DIR)/%.d)
34
35# Rules for building object files
36$(OBJ_DIR)/%.o: %.cpp
37 @mkdir -p $(OBJ_DIR)
38 @mkdir -p $(DEP_DIR)
39 $(CXX) $(CXXFLAGS) $(CF_DEP) -c $< -o $@
40
41# Rules for building dependency files
42$(DEP_DIR)/%.d: %.cpp
43 @mkdir -p $(DEP_DIR)
44
45# Enable dependency file
46-include $(DEPS)
47
48# Default target
49all: $(NAME)
50.PHONY: all
51
52# Build Target
53$(NAME): $(OBJS)
54 $(CXX) $(CXXFLAGS) $(OBJS) -o $(NAME)
55 $(call ASCII_ART,$(NAME))
56
57# REPOSITORY for Test
58TEST_ROOT = ../../cpp_module_tester
59TEST_DIR = $(TEST_ROOT)/cpp03
60URL_TEST_CPP = "https://github.com/kamitsui/cpp_module_tester.git"
61TEST_TARGET = $(TEST_DIR)/ex01_app
62EX_NUM = ex01
63
64# Test
65test:
66ifeq ($(shell test -d $(TEST_DIR) && echo exist),)
67 @echo "Please clone the test repository"
68 $(call ASK_AND_EXECUTE_ON_YES, git clone $(URL_TEST_CPP) $(TEST_ROOT))
69endif
70 $(call ASK_AND_EXECUTE_ON_YES, make -C $(TEST_DIR) $(EX_NUM))
71 $(call ASK_AND_EXECUTE_ON_YES, ./$(TEST_TARGET))
72.PHONY: test
73
74# Rule for removing object & dependency files
75clean:
76 rm -rf $(OBJ_DIR) $(DEP_DIR) $(TEST_DIR)/objs $(TEST_DIR)/.deps
77.PHONY: clean
78
79# Rule for removing Target & others
80fclean: clean
81 rm -f $(NAME) $(TEST_TARGET)
82.PHONY: fclean
83
84# Rule for Clean & Build Target
85re: fclean all
86.PHONY: re
87
88# ASCII Art : Display Tips the way to use.
89define ASCII_ART
90 @echo " _____________________________________________"
91 @echo "< Usage : >"
92 @echo "< $$ ./a.out >"
93 @echo "< >"
94 @echo "< Test Case : >"
95 @echo "< $$ make test >"
96 @echo "----------------------------------------------"
97 @echo " \ ^__^"
98 @echo " \ (oo)\_______"
99 @echo " (__)\ )\\/\\"
100 @echo " ||----w |"
101 @echo " || ||\n"
102endef
103
104# Ask and Exit on No
105define ASK_AND_EXECUTE_ON_YES
106 @echo "Execute? $(1) (y/n)"
107 @read -r answer; \
108 case "$$answer" in \
109 [yY]) \
110 echo $(1); \
111 $(1); \
112 ;; \
113 *) \
114 echo "Skip ..."; \
115 ;; \
116 esac
117endef
118
119# Makefile Option : Disable '--print-directory'
120MAKEFLAGS += --no-print-directory