Makefileの整理
[YACASL2.git] / src / Makefile
1 CC ?= gcc
2 CFLAGS ?= -g -Wall -Wextra -I $(INCLUDE)
3 RMF ?= rm -f
4 WHICH ?= which
5 CTAGS ?= ctags
6 ETAGS ?= etags
7
8 INCLUDE := ../include
9
10 COMMONSRC := word.c cmem.c cerr.c
11 CASL2SRC := struct.c hash.c
12 ASSRC := assemble.c token.c label.c
13 EXECSRC := exec.c dump.c
14
15 .PHONY: all clean
16
17 all: ../casl2 ../comet2 ../dumpword ctags etags
18
19 ../casl2: casl2.o $(subst .c,.o,$(COMMONSRC) $(CASL2SRC) $(ASSRC) $(EXECSRC))
20         $(CC) $(CFLAGS) -o $@ $^
21         @$(RMF) *.d
22
23 ../comet2: comet2.o $(subst .c,.o,$(COMMONSRC) $(CASL2SRC) $(EXECSRC))
24         $(CC) $(CFLAGS) -o $@ $^
25         @$(RMF) *.d
26
27 ../dumpword: dumpword.o $(subst .c,.o,$(COMMONSRC))
28         $(CC) $(CFLAGS) -o $@ $^
29         @$(RMF) *.d
30
31 %.o: %.c
32         $(CC) -c $(CFLAGS) $<
33
34 %.d: %.c
35         @$(CC) -MM -I $(INCLUDE) $< | sed 's/\($*\.o\):/\1 $@:/g' >$@
36
37 -include $(subst .c,.d,casl2.c comet2.c dumpword.c $(COMMONSRC) $(CASL2SRC) $(ASSRC) $(EXECSRC))
38
39 ctags: $(INCLUDE)/*.h *.c
40         @($(WHICH) $(CTAGS) && $(CTAGS) $^) >/dev/null
41
42 etags: $(INCLUDE)/*.h *.c
43         @($(WHICH) $(ETAGS) && $(ETAGS) $^) >/dev/null
44
45 clean: clean_cmd clean_build clean_tags
46
47 clean_cmd:
48         @$(RMF) ../casl2 ../comet2 ../dumpword
49
50 clean_build:
51         @$(RMF) *.o *.d
52
53 clean_tags:
54         @$(RMF) TAGS tags