CPP02 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/06 00:10:09 by kamitsui ### ########.fr #
10# #
11# **************************************************************************** #
12
13# @file ex02/Makefile
14# @brief This File is a Makefile for building Fixed class in ex02 directory.
15
16# Directories
17OBJ_DIR = objs
18DEP_DIR = .deps
19
20# Source files
21SRCS = main.cpp Fixed.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: %.c
43 @mkdir -p $(DEP_DIR)
44
45# Default target
46all: $(NAME)
47.PHONY: all
48
49# Build Target
50$(NAME): $(OBJS)
51 $(CXX) $(CXXFLAGS) $(OBJS) -o $(NAME)
52 $(call ASCII_ART,$(NAME))
53
54# REPOSITORY for Test
55TEST_ROOT = ../../cpp_module_tester
56TEST_DIR = $(TEST_ROOT)/cpp02
57URL_TEST_CPP = "https://github.com/kamitsui/cpp_module_tester.git"
58TEST_TARGET = $(TEST_DIR)/ex02_app
59
60# Test
61test:
62ifeq ($(shell test -d $(TEST_DIR) && echo exist),)
63 @echo "Please clone the test repository"
64 $(call ASK_AND_EXECUTE_ON_YES, git clone $(URL_TEST_CPP) $(TEST_ROOT))
65endif
66 $(call ASK_AND_EXECUTE_ON_YES, make -C $(TEST_DIR) ex02)
67 $(call ASK_AND_EXECUTE_ON_YES, ./$(TEST_TARGET))
68.PHONY: test
69
70# Rule for removing object & dependency files
71clean:
72 rm -rf $(OBJ_DIR) $(DEP_DIR) $(TEST_DIR)/objs $(TEST_DIR)/.deps
73.PHONY: clean
74
75# Rule for removing Target & others
76fclean: clean
77 rm -f $(NAME) $(TEST_DIR)/$(TEST_TARGET)
78.PHONY: fclean
79
80# Rule for Clean & Build Target
81re: fclean all
82.PHONY: re
83
84# ASCII Art : Display Tips the way to use.
85define ASCII_ART
86 @echo " _____________________________________________"
87 @echo "< Usage : >"
88 @echo "< $$ ./a.out >"
89 @echo "< >"
90 @echo "< Test Case : >"
91 @echo "< $$ make test >"
92 @echo "----------------------------------------------"
93 @echo " \ ^__^"
94 @echo " \ (oo)\_______"
95 @echo " (__)\ )\\/\\"
96 @echo " ||----w |"
97 @echo " || ||\n"
98endef
99
100# Ask and Exit on No
101define ASK_AND_EXECUTE_ON_YES
102 @echo "Execute? $(1) (y/n)"
103 @read -r answer; \
104 case "$$answer" in \
105 [yY]) \
106 echo $(1); \
107 $(1); \
108 ;; \
109 *) \
110 echo "Skip ..."; \
111 ;; \
112 esac
113endef
114
115# Makefile Option : Disable '--print-directory'
116MAKEFLAGS += --no-print-directory