Skip to content

masaruo/make-for-dummies

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Make入門

育てて学ぶMake

42東京におけるMake入門講義のためのレポジトリ

repository

[email protected]:masaruo/make-for-dummies.git

agenda

  1. piscineレベル
    • 基礎の振り返り
    • コンパイルの流れ
  2. libftレベル
    • *.cfilesの増加
    • *.ofilesが散らかるのを防ぐ
    • make版printf
  3. fdfレベル
    • ライブラリ
    • 機能ごとに分けられて複雑になった./src/**/*.c
  4. 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

今回提示されている例がベストプラクティと言える自信はないので、一例として参照してください。

About

Make入門@42Tokyo

Resources

License

Stars

Watchers

Forks

Packages

No packages published