42東京におけるMake入門講義のためのレポジトリ
[email protected]:masaruo/make-for-dummies.git
- piscineレベル
- 基礎の振り返り
- コンパイルの流れ
- libftレベル
*.cfilesの増加*.ofilesが散らかるのを防ぐ- make版
printf
- fdfレベル
- ライブラリ
- 機能ごとに分けられて複雑になった
./src/**/*.c
- minishellレベル
*.hファイルをMAKEの依存関係に載せる- 状況に応じて変数(i.e. CFLAGS)の値を変える
- 以下のMakefileが
minishell級の最終版です。これを見て、学ぶものがあるかご判断ください。
NAME := a.out
CC := cc
CPPFLAGS := -I./includes \
-I./fakelibx \
-MMD -MP
CFLAGS := -Wall -Wextra
SRC := common.c piyo.c hoge.c main.c
OBJDIR := ./obj
LDFLAGS := -Lfakelibx
LDLIBS := -lfake
#OBJ = $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
#DEP = $(OBJ:%.o=%.d)
vpath %.c ./src:./src/piyo:./src/piyo/hoge
ifeq ($(DEBUG), true)
CFLAGS += -g3 -O0 -fsanitize=address
LDFLAGS += -fsanitize=address
else
CFLAGS += -Werror
endif
OBJ := $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
DEP := $(OBJ:%.o=%.d)
$(warning OBJ=[$(OBJ)], DEP=[$(DEP)])
all: $(NAME)
$(OBJDIR)/%.o : %.c | $(OBJDIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
$(NAME): $(OBJ)
$(CC) $(LDFLAGS) $(LDLIBS) -o $@ $^
$(OBJDIR):
mkdir -p $@
debug: clean
$(MAKE) DEBUG=true
clean:
$(RM) $(NAME)
$(RM) -r $(OBJDIR)
.PHONY: clean debug all
-include $(DEP)
Warning
今回提示されている例がベストプラクティと言える自信はないので、一例として参照してください。