Previous: Limitations of Usual Tools, Up: Portable Shell [Contents][Index]
make
¼«¿È¤Ë¤ÏÈó¾ï¤Ë¿¤¯¤ÎÀ©¸Â¤¬¤¢¤ë¤Î¤Ç¶ìÏ«¤·¤Þ¤¹¡¤¤³¤³¤Ç¤Ï¤ï¤º
¤«¤Ç¤¹¤¬¾Ò²ð¤·¤Þ¤¹¡¥¤È¤Ë¤«¤¯¡¤¥·¥§¥ë¤Ë¤è¤Ã¤Æ¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤Î¤Ç¡¤¤½
¤Î¼å¤¤Éôʬ¤ÎÁ´¤Æ¤¬·Ñ¾µ¤µ¤ì¤Æ¤¤¤¯¤È¤¤¤¦¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤
...
$<
POSIX¤Ç¤Ï¡¤makefile¤Î¹½À®Êª¤Î‘$<’¤Ï¿ä¬¤µ¤ì¤ëµ¬Â§
¤È‘.DEFAULT’¥ë¡¼¥ë¤Î¤ß¤Ç»ÈÍѲÄǽ¤À¤È¹ð¤²¤Æ¤¤¤Þ¤¹¡¥Ä̾ï¤Î¥ë¡¼¥ë¤Ç¤Î
¤½¤Î°ÕÌ£¤ÏÌÀµ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡¥Î㤨¤Ð¡¤Solaris 8¤Îmake
¤Ï¤½¤ì¤ò
°ú¿ô¤ÇÃÖ´¹¤·¤Þ¤¹¡¥
NEWS-OS 4.2R¤Î¤è¤¦¤Ë¡¤¥Þ¥¯¥í̾¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤òÁ°ÃÖ¤¹¤ë¤³¤È¤ò¥µ¥Ý¡¼¥È¤·
¤Æ¤¤¤Ê¤¤make
¤â¤¢¤ê¤Þ¤¹¡¥
$ cat Makefile _am_include = # _am_quote = all:; @echo this is test $ make Make: Must be a separator on rules line 2. Stop. $ cat Makefile2 am_include = # am_quote = all:; @echo this is test $ make -f Makefile2 this is test
HP-UX¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤Ã¤Æ¤Ï¡¤make
¤Ë¤Ï¡¤¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å°Ê¹ß¤Î
Ê£¿ô¤Î²þ¹Ô¤ò¡¤¶õ¤Ç¤Ï¤Ê¤¤¹Ô¤â´Þ¤á¤ÆÆÉ¤ß¹þ¤à¤â¤Î¤â¤¢¤ê¤Þ¤¹¡¥Î㤨¤Ð°Ê²¼¤Î¤è
¤¦¤Ë¤·¤Þ¤¹¡¥
FOO = one \ BAR = two test: : FOO is "$(FOO)" : BAR is "$(BAR)"
FOO
¤Ïone BAR = two
¤ÈÅù²Á¤Ç¤¹¡¥¤½¤ì°Ê³°¤Îmake
¤Ç¤Ï¡¤
¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ïľ¸å¤Î¹Ô¤À¤±¤ò´Þ¤ß¤Þ¤¹¡¥
POSIX¤Ë¤è¤ë¤È¡¤Makefile¤Î¥³¥á¥ó¥È¤Ï#
¤Ç¤Ï¤¸¤Þ¤ê¡¤
¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤¤²þ¹Ô¤Þ¤Ç³¤¤Þ¤¹¡¥
% cat Makefile # A = foo \ bar \ baz all: @echo ok % make # GNU make ok
¤·¤«¤·¸½¼Â¤Ç¤Ï¡¤¤³¤ì¤Ï¾ï¤Ë¤½¤¦¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¡¤#
¤«¤é¹ÔËö¤Þ¤Ç¤òÇÑ´þ¤·¡¤¸åÃÖ¤µ¤ì¤ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤ò̵»ë¤¹¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡¥
% pmake # BSD make "Makefile", line 3: Need an operator Fatal errors encountered -- cannot continue
¤³¤Î¤¿¤á¡¤Ê£¿ô¹Ô¤ÎÄêµÁ¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤·¤¿¤¤¾ì¹ç¡¤ºÇ½é¤Î¹Ô¤À¤±¤Ç¤Ê¤¯¡¤¤½
¤ì¤¾¤ì¤Î¹Ô¤Ë#
¤òÁ°ÃÖ¤·¤Æ¤¯¤À¤µ¤¤¡¥
# A = foo \ # bar \ # baz
make macro=value
¤È¥µ¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¥³¥Þ¥ó¥É¥é¥¤¥óÊÑ¿ô¤Îfoo=bar
¤Î¤è¤¦¤ÊÄêµÁ¤Ï¡¤Makefile¤Î
foo
¤ÎÄêµÁ¤ËÍ¥À褷¤Þ¤¹¡¥(GNU make
¤Î¤è¤¦¤Ê)
make
¤Î¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¡¤¤³¤ÎÍ¥Àè¤Ï¥µ¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¤ËÅÁȤ·¤Þ¤¹¡¥¸Å¤¤¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¡¤¤½¤ì°Ê²¼¤Îmake
¤ËÂåÆþ¤òÅϤµ¤Ê
¤¤¤â¤Î¤â¤¢¤ê¤Þ¤¹¡¥
% cat Makefile foo = foo one: @echo $(foo) $(MAKE) two two: @echo $(foo) % make foo=bar # GNU make 3.79.1 bar make two make[1]: Entering directory `/home/adl' bar make[1]: Leaving directory `/home/adl' % pmake foo=bar # BSD make bar pmake two foo
¥µ¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¤Ëfoo=bar
¤ÎÍ¥Àè¤òÅÁȤ·¤¿¤¤¾ì¹ç¡¤°Ü¿¢
À¤ò»ý¤¿¤»¤ëÊýË¡¤¬Ìµ¤¤¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¤½¤Î°ì¤Ä¤Ï¡¤¤¹¤Ù¤Æ¤Î´Ä¶ÊÑ¿ô¤ò
Makefile¥Þ¥¯¥íÄêµÁ¤ËÍ¥À褵¤»¤ë-e
¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¡¤
foo¤ò´Ä¶ÊÑ¿ô¤È¤·¤ÆÄêµÁ¤¹¤ëÊýË¡¤Ç¤¹¡¥
% env foo=bar make -e
-e
¥ª¥×¥·¥ç¥ó¤Ï¡¤¼«Æ°Åª¤Ë¥µ¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¤ËÅÁȤ·¡¤´Ä
¶ÊÑ¿ô¤Ïmake
¤Î¸Æ¤Ó½Ð¤·´Ö¤Ç·Ñ¾µ¤µ¤ì¤ë¤Î¤Ç¡¤foo
¥Þ¥¯¥í¤Ï¥µ
¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¤Ç´üÂÔ¤·¤¿¤è¤¦¤ËÍ¥À褵¤ì¤Þ¤¹¡¥
¤³¤Î¹½Ê¸(foo=bar make -e
)¤Ï¡¤Makefile¤Î³°¤Ç»ÈÍѤ¹¤ë¤È¤¤À
¤±¡¤Î㤨¤Ð¡¤¥¹¥¯¥ê¥×¥È¤ä¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¤È¤¤À¤±°Ü¿¢À¤¬¤¢¤ê¤Þ¤¹¡¥
make
¥ë¡¼¥ëÆâ¤Ç¼Â¹Ô¤¹¤ë¤È¤¡¤GNU make
3.80¤È¤½¤ì°ÊÁ°
¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï¡¤¤½¤ì°Ê²¼¤Ç¤Îmake
¤Ë-e
¥ª¥×¥·¥ç¥ó¤òÅÁȤµ
¤»¤ë¤³¤È¤ò˺¤ì¤Æ¤¤¤Þ¤¹¡¥
¹¹¤Ë-e
¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¤Makefile¤ÇÄ̾ïÄêµÁ¤µ¤ì¤ë¤½¤Î¾¤Î¥Þ
¥¯¥í¤¬´Ä¶ÊÑ¿ô¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¡¤Í½´ü¤·¤Ê¤¤ÉûºîÍѤ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡¥
(°Ê²¼¤Îmake -e
¤ÈSHELL
¤ÎÃí°Õ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡¥)
¥µ¥Ö¸Æ¤Ó½Ð¤·¤Îmake
¤ËÍ¥Àèʪ¤òÅÁȤµ¤»¤ë¤â¤¦°ì¤Ä¤ÎÊýË¡¤Ï¡¤
Makefile¤Ë¼êư¤Ç¹Ô¤Ê¤¦¤³¤È¤Ç¤¹¡¥
foo = foo one: @echo $(foo) $(MAKE) foo=$(foo) two two: @echo $(foo)
¤½¤¦¤¹¤ë¾ì¹ç¡¤¥æ¡¼¥¶¤¬Í¥À褷¤¿¤¤¤È»×¤ï¤ì¤ë¤¹¤Ù¤Æ¤Î¥Þ¥¯¥í¤òͽ¬¤¹¤ëɬÍפ¬ ¤¢¤ê¤Þ¤¹¡¥
SHELL
¥Þ¥¯¥íPOSIX½àµò¤Îmake
¤Ç¤Ï¡¤¥·¥§¥ë¥×¥í¥»¥¹¤òµ¯Æ°¤·¤¿¤ê¡¤
Makefile¥ë¡¼¥ë¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¡¤ÆâÉô¤Ç$(SHELL)
¥Þ¥¯¥í¤ò»ÈÍÑ
¤·¤Þ¤¹¡¥¤³¤ì¤Ïmake
¤ÇÄ󶡤µ¤ì¤ëÁȤ߹þ¤ß¥Þ¥¯¥í¤Ç¤¹¤¬¡¤
Makefile¤ä¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤ÇÊѹ¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
¤¹¤Ù¤Æ¤Îmake
¤¬¡¤¤³¤ÎSHELL
¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ
¤»¤ó¡¥Î㤨¤Ð¡¤OSF/Tru64 make
¤¬¤½¤¦¤Ç¤¹¡¥¤³¤Î¼ÂÁõ¤Ç¤Ï¡¤¾ï¤Ë
/bin/sh
¤ò»ÈÍѤ·¤Þ¤¹¡¥¤½¤Î¤¿¤á¡¤Makefile¤Ç¾ï¤ËSHELL
¤òÄêµÁ¤¹¤ë¤Î¤ÏÎɤ¤¹Í¤¨¤Ç¤¹¡¥Autoconf¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¤°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ
¤¯¤À¤µ¤¤¡¥
SHELL = @SHELL@
POSIX½àµò¤Îmake
¤Ç¤Ï¡¤make -e
¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ë
¾ì¹ç¤Ç¤â¡¤´Ä¶ÊÑ¿ô¤«¤é$(SHELL)¤ÎÃͤòÆþ¼ê¤·¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó(¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¡¤
SHELL=/bin/tcsh
¤Î¾õ¶·¤Ç¥ë¡¼¥ë¤Ë¤è¤Ã¤Æ²¿¤¬µ¯¤³¤ë¤Î¤«¹Í¤¨¤Æ¤ß¤Æ¤¯¤À
¤µ¤¤)¡¥
¤·¤«¤·¡¤¤¹¤Ù¤Æ¤Îmake
¤¬¤³¤Î¤è¤¦¤ÊÎã³°¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤¢¤ê
¤Þ¤»¤ó¡¥Î㤨¤Ð¡¤OSF/Tru64 make
¤ÏSHELL
¤ò»ÈÍѤ·¤Ê¤¤¤Î¤Ç¡¤
Êݸ¤Æ¤¤¤Ê¤¯¤Æ¤âÉԻ׵ĤǤϤ¢¤ê¤Þ¤»¤ó¡¥
% cat Makefile SHELL = /bin/sh FOO = foo all: @echo $(SHELL) @echo $(FOO) % env SHELL=/bin/tcsh FOO=bar make -e # OSF1 V4.0 Make /bin/tcsh bar % env SHELL=/bin/tcsh FOO=bar gmake -e # GNU make /bin/sh bar
¥³¥á¥ó¥È¤ò¥ë¡¼¥ë¤Ë½ñ¤¹þ¤Þ¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡¥
¥¿¥Ö¤Ç»Ï¤Þ¤ë¤â¤Î¤Ï¡¤¥¿¥Ö¤Îľ¸å¤Ë#
¤¬Â³¤¤¤Æ¤¤¤Æ¤â¡¤¤¹¤Ù¤Æ¸½ºß¤Î¥ë¡¼
¥ë¤Î¥³¥Þ¥ó¥É¤È¤·¤Æ°·¤¦make
¤â¤¢¤ê¤Þ¤¹¡¥Tru64 Unix V5.1¤Î
make
¤Ï¤½¤Î°ì¤Ä¤Ç¤¹¡¥°Ê²¼¤ÎMakefile¤Ç¡¤¥·¥§¥ë¤Ç#
foo
¤ò¼Â¹Ô¤·¤Þ¤¹¡¥
all: # foo
¤Ó¤Ã¤¯¤ê¤·¤¿¤¯¤Ê¤±¤ì¤Ð¡¤¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤òobj/¤È̿̾¤·¤Ê¤¤¤Ç¤¯¤À ¤µ¤¤¡¥
obj/¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤¹¤ë¾ì¹ç¡¤BSD make
¤Ï
Makefile¤òÆÉ¤ß¹þ¤àÁ°¤Ë¡¤¤½¤Î¤Ê¤«¤ËÆþ¤ê¤Þ¤¹¡¥¤³¤Î¤¿¤á¡¤¸½ºß¤Î¥Ç¥£
¥ì¥¯¥È¥ê¤ÎMakefile¤ÏÆÉ¤ß¹þ¤Þ¤ì¤Þ¤»¤ó¡¥
% cat Makefile all: echo Hello % cat obj/Makefile all: echo World % make # GNU make echo Hello Hello % pmake # BSD make echo World World
make -k
make -k
¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤Ë°Í¸¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡¥½ªÎ»¥¹¥Æ¡¼
¥¿¥¹¤¬¥¨¥é¡¼¤«¤É¤¦¤«¤òÈ¿±Ç¤¹¤ë¼ÂÁõ¤â¤¢¤ê¤Þ¤¹¡¥¤½¤ì°Ê³°¤Î¼ÂÁõ¤Ç¤Ï¡¤¾ï¤ËÀ®
¸ù¤·¤Þ¤¹¡¥
% cat Makefile all: false % make -k; echo exit status: $? # GNU make false make: *** [all] Error 1 exit status: 2 % pmake -k; echo exit status: $? # BSD make false *** Error code 1 (continuing) exit status: 0
VPATH
POSIX¤Ç¤Ï¡¤VPATH
¥µ¥Ý¡¼¥È¤ò»ØÄꤷ¤Æ¤¤¤Þ¤»¤ó¡¥Â¿¤¯¤Î
make
¤ÏVPATH
¥µ¥Ý¡¼¥È¤Î·Á¼°¤¬¤¢¤ê¤Þ¤¹¤¬¡¤¤½¤Î¼ÂÁõ¤Ï¡¤
make
´Ö¤Ç°ì´Ó¤·¤Æ¤¤¤Þ¤»¤ó¡¥
VPATH
µ¡Ç½¤òɬÍפȤ·¤Æ¤¤¤ë¿Í¡¹¤Ø¤ÎºÇ¹â¤ÎÄó°Æ¤Ï¡¤make
¤Î¼Â
Áõ¤òÁªÂò¤·¤½¤ì¤Ë¸Ç¼¹¤¹¤ë¤è¤¦¤Ë¤È¸À¤¦¤³¤È¤«¤â¤·¤ì¤Þ¤»¤ó¡¥Makefile
¤Î·ë²Ì¤Ï¾ï¤Ë°Ü¿¢À¤¬¤¢¤ë¤È¤Ï¸Â¤é¤Ê¤¤¤Î¤Ç¡¤°Ü¿¢À¤Î¹â¤¤make
¤òÁª
Âò¤¹¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦(¥Ò¥ó¥È¡¤¥Ò¥ó¥È)¡¥
VPATH
¤Î¼ÂÁõ¤Î´ûÃΤÎÌäÂê¤Ë¤Ï°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡¥
VPATH
¤ÈÆó½Å¤Î¥³¥í¥ó¤Î¥ë¡¼¥ëVPATH
¤Ø¤ÎÂåÆþ¤Ç¡¤Sun¤Îmake
¤ÏºÇ½é¤ÎÆó½Å¥³¥í¥ó¤Î¥ë¡¼¥ë¤Î
ÁȤÀ¤±¤ò¼Â¹Ô¤·¤Þ¤¹¡¥(¤³¤Î¥³¥á¥ó¥È¤Ï¡¤1994ǯ¤«¤é¤Ç¡¤¸½ºß¤Ï̵¤¯¤Ê¤Ã¤Æ¤¤¤Þ
¤¹¡¥SunOS 4¤Ç¤Ï°Ü¿¢À¤¬¤¢¤ê¤Þ¤¹¡¥¤³¤ì¤¬ºÆÀ¸À®¤µ¤ì¤¿¾ì¹ç¡¤¤½¤ì¤òÀâÌÀ¤¹¤ë
¥Æ¥¹¥È¥±¡¼¥¹¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡¥)
$<
¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤Â¾¤Ç¤â½Ò¤Ù¤¿¤è¤¦¤Ë¡¤ÌÀ¼¨Åª¤Ê¥ë¡¼¥ë¤Ç$<
¤ò»ÈÍѤ¹¤ë¤Î¤Ï°Ü¿¢À¤¬¤¢¤ê
¤Þ¤»¤ó¡¥É¬Í×¾ò·ï¤Î¥Õ¥¡¥¤¥ë¤Ï¡¤¥ë¡¼¥ëÆâ¤ÇÌÀ¼¨Åª¤Ê̾Á°¤Ë¤¹¤Ù¤¤Ç¤¹¡¥
VPATH
¤Î¸¡º÷¤ÇɬÍ×¾ò·ï¤ò¸«¤Ä¤±¤¿¤¤¾ì¹ç¡¤¼êư¤Ç¥³¡¼¥ÉÁ´ÂΤò½ñ¤¯É¬Í×
¤¬¤¢¤ê¤Þ¤¹¡¥Î㤨¤Ð¡¤°Ê²¼¤Î¤è¤¦¤Ê¥Ñ¥¿¡¼¥ó¤ò»ÈÍѤ·¤Þ¤¹¡¥
VPATH = ../src foo.o: foo.c cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
SunOS make
¤Î¤è¤¦¤Ë¡¤VPATH
¤ÇɬÍ×¾ò·ï¤òõ¤·¡¤½Ð¸½¤¹¤ë¤¿¤Ó
¤ËŬÀڤʥ롼¥ë¤Ë¤òºÆ½ñ¤¹þ¤ß¤¹¤ëmake
¤Î¼ÂÁõ¤â¤¢¤ê¤Þ¤¹¡¥
Î㤨¤Ð¡¤°Ê²¼¤ò¹Í¤¨¤Þ¤¹¡¥
VPATH = ../src foo.o: foo.c cc -c foo.c -o foo.o
foo.c¤¬../src¤Ç¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¤cc -c ../src/foo.c -o
foo.o
¤ò¼Â¹Ô¤·¤Þ¤¹¡¥ÁÇÀ²¤é¤·¤¤¤È»×¤¤¤Þ¤¹¡¥
¤·¤«¤·¡¤¤½¤ì°Ê³°¤Îmake
¤Î¼ÂÁõ¤Ç¤Ï¡¤¤³¤ì¤Ë°Í¸¤¹¤ë¤³¤È¤ÏÉÔ²Äǽ¤Ç¡¤
VPATH
¤ò¼êư¤Ç¸¡º÷¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥
VPATH = ../src foo.o: foo.c cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
¤·¤«¤·"ɬÍ×¾ò·ï¤ÎºÆ½ñ¤¹þ¤ß"¤Ï¤³¤ì¤ËŬÍѤµ¤ì¤Þ¤¹¡¥¤½¤Î¤¿¤á¡¤
../src¤Ëfoo.c¤¬¤¢¤ë¾ì¹ç¡¤SunOS¤Îmake
¤Ï°Ê²¼¤ò¼Â¹Ô
¤·¤Þ¤¹¡¥
cc -c `test -f ../src/foo.c || echo ../src/`foo.c -o foo.o
°Ê²¼¤òÀ¸À®¤·¤Þ¤¹¡¥
cc -c foo.c -o foo.o
¤½¤·¤Æ¤³¤Î¤¿¤á¤Ë¼ºÇÔ¤·¤Þ¤¹¡¥¤¢¤¡¡¥
²óÈòºö¤Î°ì¤Ä¤Ï¡¤¥ë¡¼¥ë¤Î¤Ê¤«¤Ëfoo.c¤ò¤½¤Î¤Þ¤Þ½ñ¤¤¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Î ¤«¤á¤ë¤³¤È¤Ç¤¹¡¥Î㤨¤Ð¡¤°Ê²¼¤Î»°¤Ä¤Î¥ë¡¼¥ë¤Ï°ÂÁ´¤Ç¤¹¡¥
VPATH = ../src foo.o: foo.c cc -c `test -f ./foo.c || echo ../src/`foo.c -o foo.o foo2.o: foo2.c cc -c `test -f 'foo2.c' || echo ../src/`foo2.c -o foo2.o foo3.o: foo3.c cc -c `test -f "foo3.c" || echo ../src/`foo3.c -o foo3.o
ɬÍ×¾ò·ï¤¬¥Þ¥¯¥íÆâ¤Ë¤¢¤ë¤È¤¡¤»öÂ֤Ϥè¤ê°¤¯¤Ê¤ê¤Þ¤¹¡¥
VPATH = ../src HEADERS = foo.h foo2.h foo3.h install-HEADERS: $(HEADERS) for i in $(HEADERS); do \ $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \ $(DESTDIR)$(includedir)/$$i; \ done
¾åµ¤Îinstall-HEADERS
¥ë¡¼¥ë¤Ï¡¤for i in $(HEADERS);
¤Ï
for i in foo.h foo2.h foo3.h;
¤ËŸ³«¤µ¤ì¡¤foo.h
¤È
foo2.h
¤Ï¤½¤Î¤Þ¤Þñ¸ì¤È¤Ê¤ê¡¤¤³¤Î¤¿¤á¥µ¥Ö¥¸¥§¥¯¥È¤ÏVPATH
¤Ë
Ä´À°¤µ¤ì¤ë¤Î¤Ç¡¤SunOS¤Ç¤Ï¿®Íê¤Ç¤¤Þ¤»¤ó¡¥
»°¤Ä¤Î¥Õ¥¡¥¤¥ë¤¬../src¤Ë¤¢¤ë¾ì¹ç¡¤¤³¤Î¥ë¡¼¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¼Â¹Ô¤µ ¤ì¤Þ¤¹¡¥
for i in ../src/foo.h ../src/foo2.h foo3.h; do \ install -m 644 `test -f $i || echo ../src/`$i \ /usr/local/include/$i; \ done
ºÇ½é¤ÎÆó¤Ä¤Îinstall
¤Î¸Æ¤Ó½Ð¤·¤Ï¼ºÇÔ¤·¤Þ¤¹¡¥Î㤨¤Ð¡¤
foo.h
¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë»ö¤ò¹Í¤¨¤Þ¤¹¡¥
install -m 644 `test -f ../src/foo.h || echo ../src/`../src/foo.h \ /usr/local/include/../src/foo.h;
°Ê²¼¤òÀ¸À®¤·¤Þ¤¹¡¥
install -m 644 ../src/foo.h /usr/local/include/../src/foo.h;
¼êư¤ÎVPATH
¤Î¸¡º÷¤Ë¤ÏÌäÂ̵꤬¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥¤·¤«¤·¡¤¤³
¤Î¥³¥Þ¥ó¥É¤Ï¡¤´Ö°ã¤Ã¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ëfoo.h¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡¥
¤³¤³¤Þ¤Ç¡¤¤¤¤¯¤Ä¤«¤ÎMakefile¤Çfoo.c
¤ËÂФ·¤Æ¹Ô¤Ê¤Ã¤Æ¤¤¿¡¤
$(HEADERS)
¤ò¤É¤¦¤Ë¤«¤·¤Æ°úÍÑÉä¤Ç°Ï¤à¤³¤È¤ÏÌò¤ËΩ¤Á¤Þ¤»¤ó¡¥
install-HEADERS: $(HEADERS) headers='$(HEADERS)'; for i in $$headers; do \ $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \ $(DESTDIR)$(includedir)/$$i; \ done
¼ÂºÝ¡¤headers='$(HEADERS)'
¤Ïheaders='foo.h foo2.h foo3.h'
¤ËŸ³«¤µ¤ì¡¤foo2.h
¤Ï¤½¤Î¤Þ¤Þñ¸ì¤Ë¤Ê¤ê¤Þ¤¹¡¥(°ìÊý¡¤
headers='$(HEADERS)'; for i in $$headers;
¤Î´·ÍѶç¤Ï¡¤for i
in;
¤Ç¹½Ê¸¥¨¥é¡¼¤Ë¤Ê¤ë¥·¥§¥ë¤â¤¢¤ë¤Î¤Ç¡¤$(HEADERS)
¤¬¶õ¤Î¾ì¹ç¤ÏÎÉ
¤¤¹Í¤¨¤Ç¤¹¡¥)
²óÈòÊýË¡¤Î°ì¤Ä¤Ï¡¤ÉÔÍפÊ../src/¤ÎÀÜÆ¬¼¤ò¼êư¤Çºï½ü¤¹¤ë»ö¤Ç¤¹¡¥
VPATH = ../src HEADERS = foo.h foo2.h foo3.h install-HEADERS: $(HEADERS) headers='$(HEADERS)'; for i in $$headers; do \ i=`expr "$$i" : '../src/\(.*\)'`; $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \ $(DESTDIR)$(includedir)/$$i; \ done
Automake¤âƱÍͤʤ³¤È¤ò¹Ô¤Ê¤¤¤Þ¤¹¡¥
make
¤Îmake
¤Ï¡¤ÉԻ׵Ĥʥǥ£¥ì¥¯¥È¥ê¤ÎɬÍ×¾ò·ï¤òºîÀ®¤¹¤ëɬÍ×¾ò·ï¤¬VPATH
¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¾ì¹ç¡¤Tru64 make
¤Ï¤½¤ì¤ò¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËºîÀ®¤·¤Þ¤¹¡¥
% mkdir -p foo/bar build % cd build % cat >Makefile <<END VPATH = .. all: foo/bar END % make mkdir foo mkdir foo/bar
¥ë¡¼¥ë¤Ï¡¤Á°¤Ë¸ºß¤·¤Æ¤¤¤ë¼êư¤ÎVPATH
¸¡º÷¤ò»ÈÍѤ¹¤ë¤Î¤Ç¡¤¤³¤ì¤Ïͽ
ÁÛ³°¤Î·ë²Ì¤Ë¤Ê¤ë¤Ï¤º¤Ç¤¹¡¥
VPATH = .. all : foo/bar command `test -d foo/bar || echo ../`foo/bar
¾åµ¤Îcommand
¤Ï¡¤¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËºîÀ®¤µ¤ì¤¿¡¤¶õ¤Î
foo/bar¥Ç¥£¥ì¥¯¥È¥ê¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡¥
GNU make
¤Ï¡¤VPATH
¤Ç¸«¤Ä¤«¤Ã¤¿¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹
¤Ù¤¤È¤·èÄꤹ¤ë¥¢¥ë¥´¥ê¥º¥à¤Ï´öʬʣ»¨¤Ç¤¹¡¥See How
Directory Searches are Performed in The GNU Make Manual.
¥¿¡¼¥²¥Ã¥È¤Î¥ê¥Ó¥ë¥É¤¬É¬Íפʾì¹ç¡¤GNU make
¤Ï¡¤¤³¤Î¥¿¡¼
¥²¥Ã¥È¤òVPATH
¤Ç¸¡º÷¤·¤Æ¤¤¤ë´Ö¤Ë¸«¤Ä¤«¤Ã¤¿¥Õ¥¡¥¤¥ë̾¤òÇÑ´þ¤·¡¤
Makefile¤ÇÍ¿¤¨¤é¤ì¤¿¥Õ¥¡¥¤¥ë̾¤ò»ÈÍѤ·¤Æ¡¤¥í¡¼¥«¥ë¤Ê¥Õ¥¡¥¤¥ë¤ò¥Ó
¥ë¥É¤·¤Þ¤¹¡¥¥¿¡¼¥²¥Ã¥È¤ò¥ê¥Ó¥ë¥É¤¹¤ëɬÍפ¬Ìµ¤¤¾ì¹ç¤Ï¡¤GNU
make
¤ÏVPATH
¤Ç¸¡º÷¤·¤Æ¤¤¤ë´Ö¤Ë¸«¤Ä¤«¤Ã¤¿¥Õ¥¡¥¤¥ë̾¤ò»ÈÍÑ
¤·¤Þ¤¹¡¥
NetBSD make
¤Î¤è¤¦¤Ê¡¤¤½¤Î¾¤Îmake
¤Î¼ÂÁõ¤Ï¡¤¤è¤ê´Êñ
¤Ëµ½Ò¤Ç¤¤Þ¤¹¡¥VPATH
¤Ç¸¡º÷¤·¤Æ¤¤¤ë´Ö¤Ë¸«¤Ä¤«¤Ã¤¿¥Õ¥¡¥¤¥ë̾¤Ï¡¤¥¿¡¼
¥²¥Ã¥È¤¬¥ê¥Ó¥ë¥É¤òɬÍפȤ·¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ë¤«¤«¤ï¤é¤º»ÈÍѤµ¤ì¤Þ¤¹¡¥¤³¤Î¤¿
¤á¡ã¿·¤·¤¤¥Õ¥¡¥¤¥ë¤Ï¥í¡¼¥«¥ë¤ËºîÀ®¤µ¤ì¤Þ¤¹¤¬¡¤VPATH
¤Ë°ÌÃÖ¤¹¤ë´û¸
¤Î¥Õ¥¡¥¤¥ë¤Ï¹¹¿·¤µ¤ì¤Þ¤¹¡¥
¤·¤«¤·¡¤OpenBSD¤ÈFreeBSD¤Îmake
¤Ï¡¤ÌÀ¼¨Åª¤Ê¥ë¡¼¥ë¤ò»ý¤Ä°Í¸À¤ò
õ¤¹¤¿¤á¤ËVPATH
¤ò¼Â¹Ô¤·¤Þ¤»¤ó¡¥¤³¤ì¤ÏÈó¾ï¤Ë¥¤¥é¥¤¥é¤·¤Þ¤¹¡¥
VPATH
¤Ç¡¤autoconf¥Ñ¥Ã¥±¡¼¥¸¤Î¥Ó¥ë¥É¤ò»î¤ß¤ë¤È¤(Î㤨¤Ð¡¤
mkdir build && cd build && ../configure
)¡¤GNU
make
make
¤Ïbuild¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹¤Ù¤Æ¤Î¥í¡¼¥«
¥ë¤Ë¥Ó¥ë¥É¤·¤Þ¤¹¤¬¡¤BSD make
¤Ï¥í¡¼¥«¥ë¤Ê¿·¤·¤¤¥Õ¥¡¥¤
¥ë¤ò¥Ó¥ë¥É¤·¡¤¥½¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê¤Î´û¸¤Î¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤¹¤ë»ö¤ò°ÕÌ£¤·¤Þ¤¹¡¥
% cat Makefile VPATH = .. all: foo.x bar.x foo.x bar.x: newer.x @echo Building $@ % touch ../bar.x % touch ../newer.x % make # GNU make Building foo.x Building bar.x % pmake # NetBSD make Building foo.x Building ../bar.x % fmake # FreeBSD make, OpenBSD make Building foo.x Building bar.x % tmake # Tru64 make Building foo.x Building bar.x % touch ../bar.x % make # GNU make Building foo.x % pmake # NetBSD make Building foo.x % fmake # FreeBSD make, OpenBSD make Building foo.x Building bar.x % tmake # Tru64 make Building foo.x Building bar.x
NetBSD¤Îmake
¤¬../bar.x¤òVPATH¤Î¤¢¤ë¾ì½ê¤Ç¹¹¿·¤·¡¤
FreeBSD¡¤OpenBSD¡¤¤½¤·¤ÆTru64¤Îmake
¤Ï¡¤../bar.x¤¬ºÇ¿·¤Î
¤È¤¤Ç¤â¡¤¾ï¤Ëbar.x¤ò¹¹¿·¤¹¤ë¤³¤È¤ËÃí°Õ¤·¤Æ²¼¤µ¤¤¡¥
¸ÀµÚ¤¹¤ë²ÁÃͤΤ¢¤ë¤â¤¦°ì¤Ä¤ÎÅÀ¤Ï¡¤GNU make
¤¬°ìÅÙ
VPATH
¤Î¥Õ¥¡¥¤¥ë̾¤ò̵»ë¤¹¤ë»ö¤Ë·è¤á¤ë¤È(Î㤨¤Ð¡¤¾åµ¤ÎÎã¤Î
../bar.x¤ò̵»ë¤¹¤ë)¡¤¥¿¡¼¥²¥Ã¥È¤¬Â¾¤Î¥ë¡¼¥ë¤ÎɬÍ×¾ò·ï¤Ë¤Ê¤Ã¤¿¤È¤¡¤
¤½¤ì¤ò̵»ë¤·Â³¤±¤Þ¤¹¡¥
°Ê²¼¤ÎÎã¤Ç¤Ï¡¤bar.x: newer.x
¤Î¥ë¡¼¥ë¤ò¼Â¹Ô¤·¤Æ¤¤¤ë´Ö¤Ë
bar.x ¤ÎVPATH
¤Î·ë²Ì¤ò̵»ë¤¹¤ë¤Î¤Ç¡¤.x.y
¤Î¥ë¡¼¥ë¤ò¼Â
¹Ô¤¹¤ëÁ°¤Ë¡¤GNU make
¤ÏVPATH
¤Îbar.x¤òõ
¤µ¤Ê¤¤»ö¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡¥
% cat Makefile VPATH = .. all: bar.y bar.x: newer.x @echo Building $@ .SUFFIXES: .x .y .x.y: cp $< $@ % touch ../bar.x % touch ../newer.x % make # GNU make Building bar.x cp bar.x bar.y cp: cannot stat `bar.x': No such file or directory make: *** [bar.y] Error 1 % pmake # NetBSD make Building ../bar.x cp ../bar.x bar.y % rm bar.y % fmake # FreeBSD make, OpenBSD make echo Building bar.x cp bar.x bar.y cp: cannot stat `bar.x': No such file or directory *** Error code 1 % tmake # Tru64 make Building bar.x cp: bar.x: No such file or directory *** Exit 1
bar.x: newer.x
¥ë¡¼¥ë¤«¤é¥³¥Þ¥ó¥É¤òºï½ü¤·¤¿¾ì¹ç¡¤GNU
make
¤Ç¤Ï¼êÉʤΤ褦¤Ëưºî¤·»Ï¤á¤ë»ö¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥¤½¤ì¤Ï¡¤
bar.x
¤¬¹¹¿·¤µ¤ì¤Æ¤¤¤Ê¤¤»ö¤òÃΤäƤ¤¤ë¤Î¤Ç¡¤VPATH
(../bar.x)¤Î·ë²Ì¤¬¤¦¤Þ¤¯»ÈÍѤǤ¤ë¤È¤¤¤¦·ë²Ì¤òÇÑ´þ¤·¤Þ¤»¤ó¡¥Tru64
¤Ç¤âưºî¤·¤Þ¤¹¤¬¡¤FreeBSD¤ÈOpenBSD¤Ç¤Ï¤Þ¤À¤½¤¦¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥
% cat Makefile VPATH = .. all: bar.y bar.x: newer.x .SUFFIXES: .x .y .x.y: cp $< $@ % touch ../bar.x % touch ../newer.x % make # GNU make cp ../bar.x bar.y % rm bar.y % pmake # NetBSD make cp ../bar.x bar.y % rm bar.y % fmake # FreeBSD make, OpenBSD make cp bar.x bar.y cp: cannot stat `bar.x': No such file or directory *** Error code 1 % tmake # True64 make cp ../bar.x bar.y
¤¹¤Ù¤Æ¤Îmake
¤Î¼ÂÁõ¤¬VPATH
¤Ë¤è¤ë¥À¡¼¥²¥Ã¥È¤Î¸¡º÷¤Ë°Í¸¤·
¤Ê¤¤¤è¤¦¤Ë¤ª´ê¤¤¤¹¤ë¤Î¤¬¡¤Í£°ì¤Î²ò·èÊýË¡¤À¤È»×¤¤¤Þ¤¹¡¥¸À¤¤Âؤ¨¤ë¤È¡¤
VPATH
¤Ï¥Ó¥ë¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¥½¡¼¥¹¤Ø¤ÎͽÌó¤Ë¤¹¤Ù¤¤Ç¤¹¡¥
ñ°ì¤Î¥µ¥Õ¥£¥Ã¥¯¥¹¥ë¡¼¥ë(Single Suffix Rule)¤Ï¡¤´ðËÜŪ¤Ë(¿ä¬¤µ¤ì ¤ë)Ä̾ï¤Î¥µ¥Õ¥£¥Ã¥¯¥¹¥ë¡¼¥ë(‘.from.to:’)¤Ç¤¹¤¬¡¤¥Ç¥£¥¹¥Æ¥£¥Í¡¼ ¥·¥ç¥ó(destination)¥µ¥Õ¥£¥Ã¥¯¥¹¤Ï¶õ(‘.from:’)¤Ç¤¹¡¥
ʬΥ¤µ¤ì¤¿°Í¸À(Separated dependencies)¤Ï¡¤¥ë¡¼¥ë¤òÄêµÁ¤¹¤ë¤³¤È̵ ¤¯¡¤¥¿¡¼¥²¥Ã¥È¤ÎɬÍ×¾ò·ï¤Î¥ê¥¹¥È¤òñ½ã¤Ë»²¾È¤·¤Þ¤¹¡¥Ä̾°ìÊý¤Ç¤Ï¥ë¡¼¥ë ¤ò¡¤¤â¤¦°ìÊý¤Ç°Í¸À¤ò¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
Solaris¤Îmake
¤Ï¡¤Ã±°ì¤Î¥µ¥Õ¥£¥Ã¥¯¥¹¥ë¡¼¥ë¤ÇÄêµÁ¤µ¤ì¤¿¥¿¡¼¥²¥Ã
¥È¤ËÂФ¹¤ë¡¤Ê¬Î¥¤µ¤ì¤¿°Í¸À¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡¥
$ cat Makefile .SUFFIXES: .in foo: foo.in .in: cp $< $ $ touch foo.in $ make $ ls Makefile foo.in
°ìÊýGNU Make¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡¥
$ gmake cp foo.in foo $ ls Makefile foo foo.in
¤½¤ì¤Ï‘foo: foo.in’¤Î°Í¸À̵¤·¤Çưºî¤¹¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥
$ cat Makefile .SUFFIXES: .in .in: cp $< $ $ make foo cp foo.in foo
¤½¤·¤Æ¡¤¤½¤ì¤ÏÆó½Å¤Î¥µ¥Õ¥£¥Ã¥¯¥¹¤Î·Ñ¾µ¥ë¡¼¥ë¤Çưºî¤¹¤ë¤³¤È¤Ë¤âÃí°Õ¤·¤Æ¤¯ ¤À¤µ¤¤¡¥
$ cat Makefile foo.out: foo.in .SUFFIXES: .in .out .in.out: cp $< $ $ make cp foo.in foo.out
·ë²Ì¤È¤·¤Æ¡¤¤½¤Î¤è¤¦¤Ê¾õ¶·¤Ç¤Ï¡¤¥¿¡¼¥²¥Ã¥È¥ë¡¼¥ë¤ò½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥
ÅÁÅýŪ¤Ë¡¤¥Õ¥¡¥¤¥ë¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤Îʬ²òǽ¤Ï1ÉäˤʤäƤ¤¤Æ¡¤
make
¤Ï¥Õ¥¡¥¤¥ë¤¬¤½¤ì°Ê³°¤Î¤â¤Î¤è¤ê¿·¤·¤¤¤«¤É¤¦¤«¤ò·èÄꤹ¤ë¤¿¤á
¤³¤ì¤é¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤·¤¿¡¥¤·¤«¤·¡¤ºÇ¶á¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à
¤Ë¤Ïʬ²òǽ¤¬1¥Ê¥ÎÉäΥ¿¥¤¥à¥¹¥¿¥ó¥×¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤â¤Î¤â¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¡¥
make
¤Î¼ÂÁõ¤Ë¤Ï¡¤¥¿¥¤¥à¥¹¥¿¥ó¥×Á´ÂΤò¸«¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡¥¤½¤ì°Ê
³°¤Ç¤Ï¡¤Ê¬¿ôÉôʬ¤ò̵»ë¤·¡¤·ë²Ì¤È¤·¤Æ´Ö°ã¤Ã¤¿¤â¤Î¤È¤Ê¤ë¤Ï¤º¤Ç¤¹¡¥Ä̾¤³
¤ì¤ÏÌäÂꤢ¤ê¤Þ¤»¤ó¤¬¡¤Èó¾ï¤Ëµ©¤Ê¾õ¶·¤Ç¤Ï¡¤¥¿¥¤¥à¥¹¥¿¥ó¥×¤ÎÀÚ¤êµÍ¤á¤Î¥Ð¥°
¤ò²óÈò¤¹¤ë¤¿¤á¡¤‘sleep 1’¤Î¤è¤¦¤Ê¼êË¡¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ
¤»¤ó¡¥
‘cp -p’¤È ‘touch -r’¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤Ç¤Ï¡¤Ä̾ï¤Ï¥Õ¥¡¥¤¥ë¤Î¥¿¥¤ ¥à¥¹¥¿¥ó¥×¤ò´°Á´¤Êʬ²òǽ¤Ç¥³¥Ô¡¼¤·¤Þ¤»¤ó(see Limitations of Usual Tools)¡¥¤³¤Î¤¿¤á¡¤°Ê²¼¤Î¤è¤¦¤Ê¥ë¡¼¥ë¤Ïµ¤¤òÉÕ¤±¤ë¤Ù¤¤Ç¤¹¡¥
dest: src cp -p src dest
¤½¤ì¤Ï¡¤¥¿¥¤¥à¥¹¥¿¥ó¥×¤ÎÀÚ¤êµÍ¤á¸å¤Ç¤Ï¡¤src¤è¤ê¤âdest¤¬¸Å
¤¯¤Ê¤ê¡¤¤³¤Î¤¿¤ámake
¤Ï¼¡²ó¤âÉÔɬÍפʻŻö¤òºÆ¤Ó¹Ô¤Ê¤¦¤Ï¤º¤Ç¤¹¡¥
¤³¤ÎÌäÂê¤ò²óÈò¤¹¤ë¤¿¤á¡¤¥¿¥¤¥à¥¹¥¿¥ó¥×¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
Î㤨¤Ð°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡¥
dest-stamp: src cp -p src dest date >dest-stamp
Previous: Limitations of Usual Tools, Up: Portable Shell [Contents][Index]