57d6e99f9ca07024b79ef9e9179d382db0960947
[YACASL2.git] / src / Makefile
1 # ソースファイル。グループに分類
2 CMDOBJ := casl2 comet2 dumpword casl2rev
3 COMMONOBJ := word cmem cerr
4 CASL2OBJ := struct hash
5 ASOBJ := assemble token label
6 EXECOBJ := exec dump
7
8 # ヘッダファイル
9 INCLUDEDIR := ../include
10 INCLUDE = -I $(INCLUDEDIR)
11
12 # コマンド
13 CC := gcc
14 CFLAGS := -g -Wall -Wextra $(INCLUDE)
15 CTAGS := ctags
16 ETAGS := etags
17 ECHO := echo
18 SED := sed
19 WHICH := which
20
21 .PHONY: all build tag clean
22
23 all: build tag
24
25 # casl2、comet2、dumpwordのビルド
26 build: $(CMDOBJ)
27
28 casl2: $(addsuffix .o,casl2 $(COMMONOBJ) $(CASL2OBJ) $(ASOBJ) $(EXECOBJ))
29
30 comet2: $(addsuffix .o,comet2 $(COMMONOBJ) $(CASL2OBJ) $(EXECOBJ))
31
32 dumpword: $(addsuffix .o,dumpword $(COMMONOBJ))
33
34 casl2rev:$(addsuffix .o,casl2rev $(COMMONOBJ) $(CASL2OBJ) $(EXECOBJ))
35
36 # .dファイルからヘッダファイルの依存関係を取得する
37 # tags、check、clean、.d で終わるターゲットの場合は除く
38 NODEP := %tags %check %clean %.d
39 ifeq ($(filter $(NODEP),$(MAKECMDGOALS)),)
40   -include $(addsuffix .d,$(CMDOBJ) $(COMMONOBJ) $(CASL2OBJ) $(ASOBJ) $(EXECOBJ))
41 endif
42
43 # tagファイル作成 - ctags & etags
44 # コマンドがない場合はなにもしない
45 tag: tags TAGS
46
47 tags: $(INCLUDEDIR)/*.h *.c
48         $(if $(strip $(shell $(WHICH) $(CTAGS))),$(CTAGS) $^,@$(ECHO) '$(CTAGS): not found')
49
50 TAGS: $(INCLUDEDIR)/*.h *.c
51         $(if $(strip $(shell $(WHICH) $(ETAGS))),$(ETAGS) $^,@$(ECHO) '$(ETAGS): not found')
52
53 # makeで生成したファイルの削除
54 distclean: clean
55         $(RM) casl2 comet2 dumpword
56
57 clean:
58         $(RM) *.o *.d
59
60 tag-clean:
61         $(RM) TAGS tags
62
63 # ヘッダファイルの依存関係を.dファイルに出力する
64 %.d: %.c $(INCLUDEDIR)/package.h
65         $(CC) -MM -I $(INCLUDEDIR) $< | $(SED) 's,$*\.o *:,$*.o $*.d:,g' >$@
66
67 $(INCLUDEDIR)/package.h: ../VERSION
68         $(MAKE) -C .. version