[ C++‚ÅŠJ”­ ]

‚f‚m‚t make‚ÌŽg‚¢•û

XV“úF

‚b++‚̃rƒ‹ƒh‚ð‚f‚m‚t make‚ōs‚¢‚Ü‚·B

Makefile‹Lqƒeƒ“ƒvƒŒ[ƒg

’PˆêƒfƒBƒŒƒNƒgƒŠ‚Å1‚‚̎Àsƒtƒ@ƒCƒ‹ì¬—p

Hello makefileiVer.1)

ˆê‚‚ÌsrcƒfƒBƒŒƒNƒgƒŠAˆê‚‚ÌincludeƒfƒBƒŒƒNƒgƒŠ‚©‚ç‚È‚éƒ\[ƒXƒtƒ@ƒCƒ‹‚ðmake‚µAˆê‚‚̎Àsƒtƒ@ƒCƒ‹‚ðì¬‚µ‚Ü‚·B

PROGRAM = hello.exe
SRCS = Hello.cc Main.cc
OBJS = $(subst .cc,.o,$(SRCS))

RM := rm
CXX := g++
CC := g++

CPPFLAGS = -I../include
LDFLAGS = -mno-cygwin

$(PROGRAM): $(OBJS)
        $(LINK.o) $^ $(LOADLIBES) -o $@

.PHONY: clean

clean:
        $(RM) $(OBJS) $(PROGRAM)

.ccƒtƒ@ƒCƒ‹‚©‚ç.oƒtƒ@ƒCƒ‹‚ÖƒRƒ“ƒpƒCƒ‹‚·‚郋[ƒ‹‚́AGNU make‚̈Öق̃‹[ƒ‹‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·B

make‚ðŽÀs‚·‚邯A

  1. ‚Ü‚¸ƒfƒtƒHƒ‹ƒgiÅ‰‚É“oê‚·‚éjƒ^[ƒQƒbƒg‚Å‚ ‚é$(PROGRAM)A‚‚܂èhello.exeƒ^[ƒQƒbƒg‚ª•]‰¿‚³‚ê‚éBƒ^[ƒQƒbƒg‚ªŽÀs‚³‚ê‚éðŒ‚ÍŽŸ‚̂Ƃ¨‚èB •]‰¿‚³‚ê‚éƒ}ƒNƒ
    $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) -o $@
    ƒ}ƒNƒ‚ª“WŠJ‚³‚êŽÀs‚³‚ê‚é—á
    g++ -mno-cygwin Hello.o Main.o -o hello.exe
  2. $(OBJS)ƒ^[ƒQƒbƒg‚‚܂èHello.o‚ÆMain.o‚ª‘¶Ý‚µ‚È‚¯‚ê‚΁AHello.o‚¨‚æ‚ÑMain.o‚ðƒ^[ƒQƒbƒg‚Æ‚µ‚Ä•]‰¿‚·‚éB‚±‚±‚ŁAƒ^[ƒQƒbƒg‚ªMakefile‚É’è‹`‚³‚ê‚Ä‚¢‚È‚¢‚½‚߁AˆÃ–ق̃‹[ƒ‹‚ª“K—p‚³‚ê‚éB •]‰¿‚³‚ê‚éƒ}ƒNƒ
    $(COMPILE.cc) $(OUTPUT_OPTION) $<
    “WŠJ‚³‚ê‚é’†ŠÔƒ}ƒNƒ
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
    ƒ}ƒNƒ‚ª“WŠJ‚³‚êŽÀs‚³‚ê‚é—á
    g++ -mno-cygwin -I../include -c -o Hello.o Hello.cc

make’†‚ÅŽg—p‚·‚éƒRƒ}ƒ“ƒh–¼‚́AˆÚA«‚ðl—¶‚µ‚ĕϐ”‚Å•\‚·‚Ì‚ª‚æ‚¢Kе‚Å‚·B

RM := rm
CXX := g++
CC := g++

Ä‹A“WŠJ‚·‚é•K—v‚ª‚È‚¢‚̂ŁA’Pƒ“WŠJ•ϐ”‚Æ‚µ‚Ä‘ã“üi:=j‚ðŽg—p‚µ‚Ä‚¢‚Ü‚·B

ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µ‚È‚¢ƒ^[ƒQƒbƒgi‹[Ž—ƒ^[ƒQƒbƒgj‚́A.PHONY‚ÅŽw’肵‚Ü‚·B‹ô‘R‹[Ž—ƒ^[ƒQƒbƒg‚Æ“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‘¶Ý‚µ‚Ä‚µ‚Ü‚Á‚½ê‡‚̌듮ì‚ð–h‚¬‚Ü‚·B

.PHONY: clean 

ƒ\[ƒXƒtƒ@ƒCƒ‹‚ðMakefile’†‚ÅŽw’è‚·‚é‚̂ł͂Ȃ­A‚»‚̏ê‚ŃJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ‚É‚ ‚é‚à‚Ì‚ð‘ΏۂƂ·‚邱‚Æ‚à‚Å‚«‚Ü‚·B

SRCS := $(wildcard *.cc)
OBJS = $(subst .cc,.o,$(SRCS))

Hello makefileiVer.2)

Ver.1‚ł́Aƒwƒbƒ_[ƒtƒ@ƒCƒ‹‚̕ύX‚Ímake‚ÉŒŸ’m‚³‚ê‚Ü‚¹‚ñB‚»‚±‚ŁAƒwƒbƒ_[ƒtƒ@ƒCƒ‹‚̕ύX‚ðŒŸ’m‚Å‚«‚邿‚¤‚Ɉˑ¶ŠÖŒW‚Ì‹Lq‚ð’ljÁ‚µ‚Ü‚·B

PROGRAM = hello.exe
SRCS = Hello.cc Main.cc
OBJS = $(subst .cc,.o,$(SRCS))

RM := rm
MV := mv
CXX := g++
CC := g++
SED := sed

CPPFLAGS = -I../include
LDFLAGS = -mno-cygwin

dependencies = $(subst .o,.d,$(OBJS))

$(PROGRAM): $(OBJS)
        $(LINK.o) $^ $(LOADLIBES) -o $@

.PHONY: clean

clean:
        $(RM) $(OBJS) $(PROGRAM) $(dependencies)

ifneq "$(MAKECMDGOALS)" "clean"
include $(dependencies)
endif

%.d: %.cc
        $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M $< | \
        $(SED) 's,\($(notdir $*)\.o\) *:,$(dir $@)\1 $@: ,' >[email protected]
        $(MV) [email protected] $@

ƒ\[ƒXƒtƒ@ƒCƒ‹(.cc)‚ƃwƒbƒ_[ƒtƒ@ƒCƒ‹(.hh)‚̈ˑ¶ŠÖŒW‚́A.dƒtƒ@ƒCƒ‹‚É‹Lq‚µ‚Ü‚·B.dƒtƒ@ƒCƒ‹‚́Agcc‚Ì-MƒIƒvƒVƒ‡ƒ“‚Ő¶¬‚³‚ê‚éˆË‘¶ŠÖŒWƒtƒ@ƒCƒ‹‚©‚çsedƒRƒ}ƒ“ƒh‚ðŽg‚Á‚Ä’Šo‚µ‚Ü‚·Bi‘¼‚̃Rƒ“ƒpƒCƒ‰‚ł̓IƒvƒVƒ‡ƒ“‚Əo—ÍŒ`Ž®‚ªˆá‚¤‚̂Œ²®‚ª•K—vj

.dƒtƒ@ƒCƒ‹‚Í“s“xC³‚³‚ê‚é‚̂ŁAMakefile‚©‚çinclude‚·‚邿‚¤‚É‚µ‚Ä‚¢‚Ü‚·B

•¡”ƒfƒBƒŒƒNƒgƒŠ‚Å•¡”ƒ‰ƒCƒuƒ‰ƒŠEŽÀsƒtƒ@ƒCƒ‹ì¬—p

ƒfƒBƒŒƒNƒgƒŠ‚ɑ΂µ‚čċA“I‚ÉŽÀs‚·‚éMakefile‚ð‹Lq‚·‚é‚â‚è•û‚́A‘ÐuGNU Make ‘æ3”Łv‚ł͐„§‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB‘ã‚í‚è‚ɁAŠeƒfƒBƒŒƒNƒgƒŠ‚̐ݒè‚ð‹Lq‚µ‚½ŒÂ•ʃtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh‚µ‚½1‚‚ÌMakefile‚Å‘S‘̂𐧌䂷‚é•û–@‚𐄏§‚µ‚Ä‚¢‚Ü‚·B

[To Be Description]


GNU make‚̐ݒè

Ž©“®•ϐ”

•ϐ”–¼ “à—e
$@ ƒ^[ƒQƒbƒg‚̃tƒ@ƒCƒ‹–¼
$% ƒ‰ƒCƒuƒ‰ƒŠ‚̍\¬Žw’è’†‚Ì—v‘f
$< Å‰‚Ì•K{€–ڂ̃tƒ@ƒCƒ‹–¼
$? ƒ^[ƒQƒbƒg‚æ‚èÅV‚Ì•K{€–Ú‚ðƒXƒy[ƒX‚Å‹æØ‚Á‚½ƒŠƒXƒg
$^ ‚·‚ׂĂ̕K{€–Ú‚ðƒXƒy[ƒX‚Å‹æØ‚Á‚½ƒŠƒXƒgid•¡‚͏œ‚­j
$+ ‚·‚ׂĂ̕K{€–Ú‚ðƒXƒy[ƒX‚Å‹æØ‚Á‚½ƒŠƒXƒgid•¡‚ðŠÜ‚ށj
$* ƒ^[ƒQƒbƒgƒtƒ@ƒCƒ‹–¼‚̃TƒtƒBƒbƒNƒX‚ðœ‚¢‚½ƒtƒ@ƒCƒ‹–¼ibasenamej

GNU make‚̃fƒtƒHƒ‹ƒgƒVƒ“ƒ{ƒ‹

ƒVƒ“ƒ{ƒ‹ “à—e ƒfƒtƒHƒ‹ƒg‚Ì’è‹`
CXX C++ƒRƒ“ƒpƒCƒ‹ƒRƒ}ƒ“ƒh–¼ g++
CXXFLAGS C++ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“ –¢’è‹`
CPPFLAGS ƒvƒŠƒvƒƒZƒbƒT—pƒIƒvƒVƒ‡ƒ“ –¢’è‹`
TARGET_ARCH –¢’è‹`
LDFLAGS ƒŠƒ“ƒJ—pƒIƒvƒVƒ‡ƒ“ –¢’è‹`
COMPILE.cc C++‚̃Rƒ“ƒpƒCƒ‹ŽÀs $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.C $(COMILE.cc)
COMPILE.cpp $(COMILE.cc)
LINK.cc C++‚ÌƒŠƒ“ƒNŽÀs
(ƒ\[ƒX‚©‚çˆê‹C‚ÉŽÀs‘Ì‚ðì‚éj
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
LINK.C $(LINK.cc)
LINK.cpp $(LINK.cc)
LINK.o ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ÌƒŠƒ“ƒN $(CC) $(LDFLAGS) $(TARGET_ARCH)
OUTPUT_OPTION -o $@

GNU make‚̃fƒtƒHƒ‹ƒg’è‹`ˆÃ–ق̃‹[ƒ‹

C/C++Œ¾Œê—p‚̃‹[ƒ‹‚𔲐ˆ‚µ‚Ü‚µ‚½B‘S‚Ä‚ðŒ©‚éê‡A--print-data-base (-p)ƒIƒvƒVƒ‡ƒ“‚ðŽg‚¢‚Ü‚·B

ƒ‹[ƒ‹ ŽÀs
%: %.o $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
%: %.cc $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
%.o: %.cc $(COMPILE.cc) $(OUTPUT_OPTION) $<
%: %.C $(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@
%.o: %.C $(COMPILE.C) $(OUTPUT_OPTION) $<
%: %.cpp $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
%.o: %.cpp $(COMPILE.cpp) $(OUTPUT_OPTION) $<
.cc.o: $(COMPILE.cc) $(OUTPUT_OPTION) $<
.cc: $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
.C.o: $(COMPILE.C) $(OUTPUT_OPTION) $<
.C: $(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@
.cpp.o: $(COMPIILE.cpp) $(OUTPUT_OPTIONS) $<
.cpp: $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@

ˆÃ–Ùƒ‹[ƒ‹‚ðíœ‚·‚é‚È‚ç‚΁A‹ó‚̃‹[ƒ‹‚ð‹Lq‚µ‚Ü‚·B

%.o: %.l

ƒpƒ^[ƒ“ƒ‹[ƒ‹‚ƃTƒtƒBƒbƒNƒXƒ‹[ƒ‹

ƒpƒ^[ƒ“ƒ‹[ƒ‹‚́Aƒtƒ@ƒCƒ‹–¼–{‘Ì(basename)‚ð'%'‚ÅŽ¦‚µAƒ‹[ƒ‹‚ð‹Lq‚µ‚Ü‚·B

%.o: %.c
        $(COMPILE.c) $(OUTPUT_OPTION) $<

ƒpƒ^[ƒ“ƒ‹[ƒ‹’†‚ł̓tƒ@ƒCƒ‹–¼‚Ì’†‚Å%‚Í1“x‚µ‚©Žg‚¦‚Ü‚¹‚ñB

“Á’è‚̃^[ƒQƒbƒg‚ɑ΂µ‚Ă̂݃pƒ^[ƒ“ƒ‹[ƒ‹‚ð“K—p‚³‚¹‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

$(OBJECTS): %.o: %.c
        $(CC) -c $(CPPFLAGS) $< -o $@

$(OBJECTS)‚É‹Lq‚³‚ꂽƒtƒ@ƒCƒ‹‚ð\’z‚·‚邯‚«‚ɂ̂݃pƒ^[ƒ“ƒ‹[ƒ‹‚ð“K—p‚µ‚Ü‚·B

ƒTƒtƒBƒbƒNƒXƒ‹[ƒ‹‚́A‹Œ—ˆ‚Ìmake‚Ƃ̌݊·«‚Ì‚½‚߂Ɏc‚³‚ê‚Ä‚¢‚Ü‚·BGNU make‚Å‹Lq‚·‚éê‡‚̓pƒ^[ƒ“ƒ‹[ƒ‹‚ðŽg‚¤‚Ì‚ªƒxƒ^[‚Å‚·B

•ϐ”’è‹`‚Ì—Dæ‡˜

ƒfƒtƒHƒ‹ƒg‚ł͈ȉº‚̏‡˜‚ŕϐ”’è‹`‚Ì—Dæ“x‚ªŒˆ‚Ü‚è‚Ü‚·B

  1. ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“‚ÅŽw’èF make‚̃Rƒ}ƒ“ƒhƒ‰ƒCƒ“ƒIƒvƒVƒ‡ƒ“‚ÅŽw’肵‚½’è‹`
  2. ƒtƒ@ƒCƒ‹’†‚ÅŽw’èF makefile‚âƒCƒ“ƒNƒ‹[ƒh‚³‚ꂽƒtƒ@ƒCƒ‹‚Ì’†‚ł̒è‹`
  3. ŠÂ‹«•ϐ”‚ÅŽw’è

2.‚ðÅ—Dæ‚É‚·‚é‚ɂ́A•ϐ”‚ð’è‹`‚·‚éÛ‚Éoverride–½—ß‚ðŽg‚¢‚Ü‚·B

3.‚ðÅ—Dæ‚É‚·‚é‚ɂ́Amake‚̃Rƒ}ƒ“ƒhƒ‰ƒCƒ“ƒIƒvƒVƒ‡ƒ“‚Å--environment-overrides (-e)‚ðŽw’肵‚Ü‚·B

‘g‚ݍž‚݊֐”

ŠÖ”–¼ “à—e
$(filter ƒpƒ^[ƒ“...,ƒeƒLƒXƒg) ƒeƒLƒXƒg‚ð‹ó”’‚Å‹æØ‚Á‚½ƒŠƒXƒg‚Ƃ݂ȂµAƒpƒ^[ƒ“‚ƈê’v‚µ‚½‚à‚Ì‚ð•Ô‚·iŠ®‘Sˆê’vj
$(filterout ƒpƒ^[ƒ“..., ƒeƒLƒXƒg) ƒpƒ^[ƒ“‚Ɉê’v‚µ‚È‚¢‚à‚Ì‚ð•Ô‚·
$(findstring •¶Žš—ñ,ƒeƒLƒXƒg) ƒeƒLƒXƒg’†‚É•¶Žš—ñ‚ð’T‚µAŒ©‚‚©‚ê‚Ε¶Žš—ñŽ©gAŒ©‚‚©‚ç‚˂Ή½‚à•Ô‚³‚È‚¢
$(subst ŒŸõ•¶Žš—ñ,’uŠ·•¶Žš—ñ,ƒeƒLƒXƒg) ’Pƒ’uŠ·B‹ó”’‚É’ˆÓ
$(patsubst ŒŸõƒpƒ^[ƒ“,’uŠ·ƒpƒ^[ƒ“,ƒeƒLƒXƒg) ƒƒCƒ‹ƒhƒJ[ƒh(%)‚ªŽg‚¦‚é’uŠ·
$(•ϐ”:ŒŸõ•¶Žš—ñ=’uŠ·•¶Žš—ñ) ŽQÆ’uŠ·B’PŒê––”ö‚É‘¶Ý‚·‚錟õ•¶Žš—ñ‚ð’uŠ·
$(words ƒeƒLƒXƒg) ƒeƒLƒXƒg’†‚Ì’PŒê”‚ð•Ô‚·
$(word n, ƒeƒLƒXƒg) ƒeƒLƒXƒg’†‚Ì‚Ž”Ô–Ú‚Ì’PŒê‚ð•Ô‚·(n>=1)
$(firstword ƒeƒLƒXƒg) ƒeƒLƒXƒg’†‚̍ŏ‰‚Ì’PŒê‚ð•Ô‚·
$(wordlist ŠJŽn,I—¹,ƒeƒLƒXƒg) ƒeƒLƒXƒg’†‚ÌŠJŽn”Ԗځ`I—¹”Ԗڂ܂ł̒PŒê—ñ‚ð•Ô‚·
$(sort ƒŠƒXƒg) d•¡‚ðœ‹Ž‚µŽ«‘‡‚Ƀ\[ƒg
$(shell ƒRƒ}ƒ“ƒh)
$(wildcard ƒpƒ^[ƒ“...)
$(dir ƒŠƒXƒg...) ƒfƒBƒŒƒNƒgƒŠ•”•ª‚¾‚¯‚ð•Ô‚·
$(notdir ƒŠƒXƒg...) ƒtƒ@ƒCƒ‹–¼•”•ª‚¾‚¯‚ð•Ô‚·
$(suffix –¼‘O...) ƒTƒtƒBƒbƒNƒX‚ÌƒŠƒXƒg‚ðì‚Á‚ĕԂ·
$(basename –¼‘O...) ƒTƒtƒBƒbƒNƒX‚ðŽæ‚èœ‚¢‚½•”•ª‚ð•Ô‚·
$(addsuffix ƒTƒtƒBƒbƒNƒX,–¼‘O...) –¼‘O‚ɃTƒtƒBƒbƒNƒX‚ð’ljÁ
$(addprefix ƒvƒŒƒtƒBƒbƒNƒX,–¼‘O...) –¼‘O‚ɃvƒŒƒtƒBƒbƒNƒX‚ð’ljÁ
$(join ƒvƒŒƒtƒBƒbƒNƒXƒŠƒXƒg,ƒTƒtƒBƒbƒNƒXƒŠƒXƒg) dir‚Ænotdir‚ð•⊮‚·‚é–ðŠ„A‚»‚ꂼ‚ê‚ÌƒŠƒXƒg‚Ì1”Ô–Ú“¯ŽmA2”Ô–Ú“¯ŽmAd‚ð˜AŒ‹
$(if ðŒ,^‚̂Ƃ«‚ÉŽÀs,‹U‚̂Ƃ«‚ÉŽÀs)
$(error ƒeƒLƒXƒg) ƒeƒLƒXƒg•\ަŒãAmake‚͏I—¹ƒXƒe[ƒ^ƒX2‚ŏI—¹‚·‚é
$(foreach •ϐ”,ƒŠƒXƒg,ŽÀs•”)
$(strip ƒeƒLƒXƒg) ‘OŒã‚̋󔒍폜A“r’†‚̋󔒗ñ‚ð1‚‚̋󔒂ɒuŠ·
$(origin •ϐ”) •ϐ”‚̏oŽ©‚ð•Ô‹pBundefined | default | environment | environment-override | file | command-line | override | automatic
$(worning ƒeƒLƒXƒg) make‚͏I—¹‚µ‚È‚¢

VPATH

makeƒRƒ}ƒ“ƒh‚ɁAƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠˆÈŠO‚©‚çƒtƒ@ƒCƒ‹‚ð’T‚³‚¹‚邽‚߂̎d‘g‚݂ł·B2‚‚̐ݒè•û–@‚ª‚ ‚è‚Ü‚·B

  1. VPATH = src
    ƒfƒBƒŒƒNƒgƒŠ‚ÌƒŠƒXƒg‚ðŽw’肵‚Ü‚·B
  2. vpath %.c src
    ƒpƒ^[ƒ“‚ɍ‡’v‚·‚éƒtƒ@ƒCƒ‹‚ð’T‚·ƒfƒBƒŒƒNƒgƒŠ‚ÌƒŠƒXƒg‚ðŽw’肵‚Ü‚·B

‘ã“ü‰‰ŽZŽq

:=
’Pƒ“WŠJ•ϐ”‚ðÝ’肵‚Ü‚·B‘ã“üs‚Ímakefile‚©‚ç“ǂݍž‚Ü‚ê‚邯‰E•Ó‚ª‘¦Žž•]‰¿‚³‚ê‚Ü‚·B
=
Ä‹A“WŠJ•ϐ”‚ðÝ’肵‚Ü‚·B‘ã“üs‚Ímakefile‚©‚ç“ǂݍž‚Ü‚ê‚½Žž“_‚ł͕]‰¿‚³‚ꂸAŽg—p‚³‚ê‚邽‚тɉE•Ó‚ªÄ•]‰¿‚³‚ê‚Ü‚·B
?=
ðŒ•t‘ã“ü‚ðs‚¢‚Ü‚·B•ϐ”‚ª’l‚ðŽ‚Á‚Ä‚¢‚È‚¢ê‡‚É‘ã“ü‚ªŽÀs‚³‚ê‚Ü‚·B‚±‚ê‚͊‹«•ϐ”‚Æ‘g‚ݍ‡‚킹‚ÄŽg—p‚³‚ê‚邱‚Æ‚ª‘½‚¢‚Å‚·B
+=
ƒAƒyƒ“ƒh‚ðs‚¢‚Ü‚·B’ʏíÄ‹A“WŠJ•ϐ”‚ÉŽ©ŒÈŽQÆ‚ªŠÜ‚Ü‚ê‚邯–³ŒÀƒ‹[ƒv‚ɂȂè‚Ü‚·B‚»‚̂悤‚ȂƂ«‚Í‚±‚ê‚ðŽg‚¢‚Ü‚·B

ƒ}ƒNƒ

define•¶‚ðŽg‚Á‚Ä•¡”s‚̃Rƒ}ƒ“ƒhŽÀs‚ðƒ}ƒNƒ’è‹`‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

define create-jar
  @echo Creating $@...
  $(RM) $(TMP_JAR_DIR)
  $(MKDIR) $(TMP_JAR_DIR)
  $(CP) -r $^ $(TMP_JAR_DIR)
  cd $(TMP_JAR_DIR) && $(JAR) $(JARFLAGS) $@ .
  $(JAR) -ufm $@ $(MANIFEST)
  $(RM) $(TMP_JAR_DIR)
endef

‚±‚̃}ƒNƒ‚ðŽÀs‚·‚é‚ɂ́A’ʏí‚̕ϐ”‚Æ“¯—l‚ɌĂяo‚µ‚Ü‚·B

$(UI-JAR): $(UI_CLASSES)
        $(create-jar)

ƒ}ƒNƒ‚͈ø”‚𔺂¤‚±‚Æ‚à‚Å‚«‚Ü‚·Bdefine‹å‚Ì’†‚ł́A$1, $2, ...‚̂悤‚ÉŽQÆ‚µ‚Ü‚·B

ðŒ”»’f

ifdef, ifndef

ifdef COMSPEC
  PATH_SEP := ;
else
  PATH_SEP := :
endif

ifeq, ifneq

ŽQl‘ÐEURL

‘Ð

URL