Previous: Limitations of Usual Tools, Up: Portable Shell   [Contents][Index]


10.11 Make¤ÎÀ©¸Â

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/¤È̿̾¤·¤Ê¤¤¤Ç¤¯¤À ¤µ¤¤¡¥

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¤âƱÍͤʤ³¤È¤ò¹Ô¤Ê¤¤¤Þ¤¹¡¥

OSF/Tru64 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]