ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãMAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ãè€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã®ããããã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã cons ã§ãã
ããã°ã©ã ïŒ
NAME
çæ - ãœãããŠã§ã¢æ§ç¯ã·ã¹ãã
DESCRIPTION
ããŒãžã§ã³ 2.2.0 ã®ã¬ã€ããšãªãã¡ã¬ã³ã¹
CopyrightïŒcïŒ1996-2000 Free Software FoundationãIncã
ãã®ããã°ã©ã ã¯èªç±ãœãããŠã§ã¢ã§ãã ããªãã¯ãããåé åžããã³/ãŸãã¯ãããå€æŽããããšãã§ããŸã
Free SoftwareFoundationã«ãã£ãŠçºè¡ãããGNUGeneral Public License; ãŸã
ã©ã€ã»ã³ã¹ã®ããŒãžã§ã³2ããŸãã¯ïŒãªãã·ã§ã³ã§ïŒãã以éã®ããŒãžã§ã³ã
ãã®ããã°ã©ã ã¯ã圹ç«ã€ããšãæåŸ ããŠé åžãããŠããŸããããããªãä¿èšŒããããŸããã
ååæ§ãŸãã¯ç¹å®ç®çãžã®é©åæ§ã®é»ç€ºã®ä¿èšŒããããŸããã
詳现ã«ã€ããŠã¯ãGNU General PublicLicenseãåç §ããŠãã ããã
ãã®ããã°ã©ã ãšäžç·ã«GNUGeneral PublicLicenseã®ã³ããŒãåãåã£ãŠããã¯ãã§ãã
COPYING ãã¡ã€ã«ãåç §ããŠãã ããã ããã§ãªãå Žåã¯ãFree Software Foundation, Inc., 59 Temple ãŸã§ãé£çµ¡ãã ããã
å Žæ - ã¹ã€ãŒã 330ããã¹ãã³ãããµãã¥ãŒã»ããå· 02111-1307ãç±³åœã
æŠèŠ
ãã¡ãªãã äž»ã«ãœãããŠã§ã¢ãæ§ç¯ããããã®ã·ã¹ãã ã§ããã
以åã®ãœãããŠã§ã¢æ§ç¯ã·ã¹ãã ã çæã¯å¯ŸåŠããããã«ãŒãããèšèšãããŸãã
è€æ°ã®ãœãŒã¹ ãã£ã¬ã¯ããªã«ãŸããããœãããŠã§ã¢ãç°¡åã«æ§ç¯ã§ããŸãã çæ
ã·ã³ãã«ã§ç解ãããããä¿å®ãããããã«ã ã¹ã¯ãªãããç°¡åã«äœæã§ããŸãã
çæã¯ãè€éãªãœãããŠã§ã¢ãç°¡åãã€æ£ç¢ºã«åçŸã§ããããšãä¿èšŒããŸãã
Cons ã¯ãããããã¹ãŠãéæããããã«å€ãã®ææ³ã䜿çšããŸãã ã³ã³ã¹ãã©ã¯ã·ã§ã³ ã¹ã¯ãªããã¯
Perl ã¹ã¯ãªãããç解ãããããéåžžã«æè»ã§ãã ã®ã°ããŒãã« ã¹ã³ãŒãã³ã°
å€æ°éã§æ å ±ãå ±æããããã®ã€ã³ããŒã/ãšã¯ã¹ããŒã ã¡ã«ããºã ã«çœ®ãæããããŸãã
ããã«ãããåã¹ã¯ãªããã®å¯èªæ§ãšä¿å®æ§ãå€§å¹ ã«åäžããŸãã
æ§é ç°å¢ ãå°å ¥ãããŠããŸã: ãããã¯ã
ãã«ã ããã»ã¹ãå¶åŸ¡ããããã«å¿ èŠãªæ å ±ã è€æ°ã®ç°å¢ã䜿çšãããŠãã
ãã«ã ããªãŒã§è£œåãçæããããã«ç°ãªãã»ãã³ãã£ã¯ã¹ãå¿ èŠãªå Žåã çæ
èªåäŸåé¢ä¿åæãå®è£ ããããã䜿çšããŠå šäœãã°ããŒãã«ã«ã·ãŒã±ã³ã¹ããŸã
建ãŠãã ããªã¢ã³ã ãã«ãã¯ãåäžã®ãœãŒã¹ ããªãŒããç°¡åã«äœæã§ããŸãã ã€ã³ããªãžã§ã³ããªãã«ã
ããŒã«ã©ã€ãºãããå€æŽãè¡ãå Žåããµãã»ããåãå¯èœã§ãã ãªãŒããŒã©ã€ããèšå®ã§ããŸã
ã¹ã¯ãªãããå€æŽããããšãªãããã«ãæé ãç°¡åã«ãªãŒããŒã©ã€ãã§ããŸãã MD5 æå·å
眲å 掟çãã¡ã€ã«ã«é¢é£ä»ããããŠãããã©ãããæ£ç¢ºã«å€æããããã«äœ¿çšãããŸãã
ç¹å®ã®ãã¡ã€ã«ãåæ§ç¯ããå¿ èŠããããŸãã
äžèšã®ãã¹ãŠãæäŸããªãããçæã¯ã·ã³ãã«ã§äœ¿ãããããŸãŸã§ãã ãã®æå¿ã
é¡ããã°ããã®ããã¥ã¡ã³ãã®æ®ãã®éšåãèªãã§ç解ããŠãã ããã
ãªã çæïŒ ãªã äœãïŒ
çæ㯠make 眮æã 次ã®æ®µèœã§ã¯ãããã€ãã®
make ã®æãŸãããªãç¹æ§ (ããã³ make ã«åºã¥ãå žåçãªãã«ãç°å¢)
Consã®éçºãåæ©ä»ããŸããã
å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã è€éã
ããããèŠæš¡ã®åŸæ¥ã®ã¡ãŒã¯ããŒã¹ã®ã·ã¹ãã ã¯ãéåžžã«è€éã«ãªãåŸåããããŸãã ãªãªãžãã«ã®äœã
ãŠãŒãã£ãªãã£ãšãã®æŽŸçç©ã¯ãããŸããŸãªæ¹æ³ã§ãã®åŸåã«è²¢ç®ããŠããŸãã ã¡ã€ã¯ã¯
è€æ°ã®ãã£ã¬ã¯ããªã«åæ£ããŠããã·ã¹ãã ãæ±ãã®ã¯èŠæã§ãã ãããããªä»äºââ
ãã®å°é£ãå æããããã«ãã¢ã©ãŠã³ãã䜿çšãããŸãã éåžžã®éžæ㯠make ãåŒã³åºãããšã§ã
ãã«ãã®åãµããã£ã¬ã¯ããªã«å¯ŸããŠååž°çã«ããèªäœã ããã¯è€éãªã³ãŒãã«ã€ãªãããŸãã
å€æ°ãã©ã®ããã«èšå®ããããããŸãã¯å€æ°ã®èšå®ãã©ã®ãããªåœ±é¿ãäžããããäžæãªå Žåãå€ã
ãã«ãå šäœã«é©çšãããŸãã make ã¹ã¯ãªããèšèªã¯åŸã ã«æ¡åŒµãããŠããŸã
ããå€ãã®å¯èœæ§ãæäŸããããã«
æ¡åŒµãããèšèªã å€ãã®å Žåããã«ãã¯è€æ°ã®ãã¹ã§å®è¡ãããŸãã
é©åãªè£œåããããã£ã¬ã¯ããªããå¥ã®ãã£ã¬ã¯ããªã«ç§»åããŸãã ããã¯ãããªã
ãã«ãã®è€éããå¢ããŸãã
å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã åçŸæ§
ãã¹ãŠã® make ã®æ©ã¿ã®çš®ã¯ãåžžã«äŸåé¢ä¿ãæ£ããåŠçããããšã§ããã ã»ãšãã©ã®å Žåã
åäžã®ãã£ã¬ã¯ããªå ã§äŸåé¢ä¿ã®åççãªä»äºãããããšããŸãããããã§ã¯ãããŸãã
ãã£ã¬ã¯ããªéã§ãžã§ããå®è¡ããããã®çå£ãªè©Šã¿ãè¡ãããŸãã äŸåé¢ä¿ãããå Žåã§ã
æ£ããåäœãããã©ãããå€æããããã«ãmake ã¯åçŽãªã¿ã€ã ã¹ã¿ã³ãã®æ¯èŒã«äŸåããŸãã
ãã¡ã€ã«ããã®åŸå±ãã¡ã€ã«ã«é¢ããŠå€ããªã£ãŠããå Žåãäžè¬ã«ããã¡ã€ã«ã«ã¯é©åã§ã¯ãããŸããã
ãã¡ã€ã«ããã€åçæãããã決å®ããŸãã ããšãã°ãå€éšã©ã€ãã©ãªã
åæ§ç¯ãããŠãã¹ããããããããšãæ°ããäœæããããã¡ã€ã«ã®ã¿ã€ã ã¹ã¿ã³ãã
衚瀺ãããåã«ãã«ããããã®ã§ãæåŸã®ããŒã«ã« ãã«ããããåã«ããå¯èœæ§ããããŸãã
ããªã¢ã³ã æ§ç¯ããŸã
Make ã¯ãããªã¢ã³ã ãã«ããåŠçããããã®éãããæ©èœã®ã¿ãæäŸããŸãã å¢æ®ãšãšãã«
ããŒããŠã§ã¢ ãã©ãããã©ãŒã ã®éããšããããã°å¯èœãªã³ãŒããšæé©åãããã³ãŒãã®å¿ èŠæ§ã
ãããã®ããªã¢ã³ããç°¡åã«äœæã§ããããšãäžå¯æ¬ ã§ãã ããã«éèŠãªããšã¯ãããªã¢ã³ããäœæãããå Žåã
ããªã¢ã³ããåé¢ã§ãããããŸãã¯åçŸã§ãããã®ãããããéèŠã§ãã
èªç±ã«ãªãªãžãã«ãŸãã¯ããªã¢ã³ãã make ã䜿çšãããšããã«ãã次ã®ããã«åé¢ããããšã¯éåžžã«å°é£ã§ãã
ãœãŒã¹ãšã¯å¥ã®è€æ°ã®ãã«ã ãã£ã¬ã¯ããªã ãããŠããã®ãã¯ããã¯ã䜿ããªããã°ã
ãŸããã©ã®ããªã¢ã³ããååšããããåžžã«ä¿èšŒããããšãäºå®äžäžå¯èœã§ãã
ããªãŒãå®å šã«åæ§ç¯ããå¿ èŠã¯ãããŸããã
ãªããžããª
Make ã¯ããã¡ã€ã«ã«ååšããã³ãŒããããœãããŠã§ã¢ãæ§ç¯ããããã®éå®çãªãµããŒãã®ã¿ãæäŸããŸãã
äžå€®ãªããžããªã®ãã£ã¬ã¯ããªæ§é ã GNU make ã® VPATH æ©èœ (ããã³ãã®ä»ã®æ©èœ)
make implementations) ã¯ãããæäŸããããšãç®çãšããŠããŸãããæåŸ ã©ããã«åäœããŸãã:
åæã®æ©ã段éã§ã¿ãŒã²ãã ãã¡ã€ã«ã®ãã¹ã VPATH åã«å€æŽããããã
VPATH ãã£ã¬ã¯ããªå ã®ãã¹ãŠã®äŸåé¢ä¿ãæ€çŽ¢ããŸãã æ£ããéçºããããã«
ãã«ãã®å ŽåãããŒã«ã«ã®ãã«ã ãã£ã¬ã¯ããªã«ãã¡ã€ã«ãäœæããŠã
ããŒã«ã«ã«äŸåããã³ãŒã ãªããžã㪠(make çšèªã§ã¯ VPATH ãã£ã¬ã¯ããª) å ã®ãã¹ãŠã®ãã¡ã€ã«
ãã¡ã€ã«ãé©åã«åæ§ç¯ãããŸãã ããã¯ãå€ãã®ã³ãŒãã£ã³ã°ãè¡ããªããšãVPATH ã§ã¯äžå¯èœã§ãã
è€éãªãªããžããªã®ç¥èãã¡ã€ã¯ãã¡ã€ã«ã«çŽæ¥ã
ããŒãã³ã° it ã·ã³ãã«ãª
make ã®é£ããã®ããã€ãã¯äžã§åŒçšãããŠããŸãã ãã以éã§ã¯
ã»ã¯ã·ã§ã³ã§ã¯ãçæã玹ä»ãããããã®åé¡ã«ã©ã®ããã«å¯ŸåŠãããã瀺ããŸãã
ããŒã« ã¹ã¯ãªãã
çæ㯠Perl ããŒã¹ã§ãã ã€ãŸããCons ã¹ã¯ãªããã§ãã城éå µ & æ§ç¯ãã ãã¡ã€ã«ãåçã®ãã®
ããž ã¡ãŒã¯ãã¡ã€ã« or ã¡ã€ã¯ãã¡ã€ã«-- ãã¹ãŠ Perl ã§æžãããŠããŸãã ããã«ãããããã«ã¡ãªãããåŸãããŸãã
ã¹ã¯ãªãããæžãããã®èšèªã¯ããç¥ãããŠããŸãã ããªããããŸããŸPerlã§ãªããŠã
ããã°ã©ããŒã«ãšã£ãŠãPerl ã¯åºæ¬çã«åçŽãªå®£èšåèšèªã§ããããšãç¥ã£ãŠãããšåœ¹ã«ç«ã¡ãŸãã
æ確ã«å®çŸ©ãããå¶åŸ¡ãããŒãšäœ¿ãæ £ããã»ãã³ãã£ã¯ã¹ãåããŠããŸãã åäœããå€æ°ããããŸã
åºæ¬çã«ã¯ããµãã«ãŒãã³ãå¶åŸ¡ã®æµããªã©ãããªããæåŸ ããæ¹æ³ã§ãã ããã«ã¯
Cons ã«å°å ¥ãããç¹å¥ãªæ§æã¯ãããŸããã ã¹ã¯ãªããèšèªãšããŠã® Perl ã®äœ¿çš
ãã°ãã°è€éãªåé¡ã«å¯Ÿããé©åãªè§£æ±ºçãè¡šçŸããã¿ã¹ã¯ãç°¡çŽ åããŸã
ãã«ãã®èŠä»¶ã
ããã«ã¡ã¯ã äžçïŒ
以äžã®è°è«ã®åå°ãšãªãããã«ã ããã«ã¡ã¯ã äžçïŒ C
çæã®ããã¢ããªã±ãŒã·ã§ã³:
$env = æ°ããã³ã³ã¹();
ããã°ã©ã $env 'hello', 'hello.c';
ãã®ã¹ã¯ãªããããã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããå Žåã¯ãã¹ã¯ãªããã«ååãä»ããŸãã æ§ç¯ããããäœæãã
ããã«ã¡ã¯C ãœãŒã¹ ãã¡ã€ã«ãåããã£ã¬ã¯ããªã«ããå Žåã¯ããcons helloããšå ¥åããŠãã«ãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ïŒ
% çæããã«ã¡ã¯
cc -c ããã«ã¡ã¯.c -o ããã«ã¡ã¯.o
cc -o ããã«ã¡ã¯ hello.o
æ§é ç°å¢
Cons ã®éèŠãªåçŽåã¯ã å»ºèš ç°å¢. 建èš
ç°å¢ã¯ ãªããžã§ã¯ã ããŒãšå€ã®ãã¢ã®ã»ãããš æ¹æ³ã
ã³ã³ã¹ã«äœããæ§ç¯ããæ¹æ³ãäŒããããã«ãé©åãªã¡ãœããã
é©åãªå»ºèšç°å¢ã 次ã®äŸãæ€èšããŠãã ããã
$env = æ°ããã³ã³ã¹(
CC => 'gcc',
ã©ã€ãã©ãª => 'libworld.a'
);
ããã°ã©ã $env 'hello', 'hello.c';
ãã®å Žåãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ããã®ãŸãŸäœ¿çšããã®ã§ã¯ãªãã
`CC' ã®å€ãäžæžãããŠã代ããã« GNU C Compiler ã®ç䟡ç©ã䜿çšãããããã«ããŸããã 以æ¥
ãã®ããŒãžã§ã³ã® ããã«ã¡ã¯ã äžçïŒ ã©ã€ãã©ãªãå¿ èŠã§ãã libworld.aãä»»æã®
ãã®ç°å¢ã§ãªã³ã¯ãããããã°ã©ã ã¯ããã®ã©ã€ãã©ãªãšãªã³ã¯ããå¿ èŠããããŸãã å³æžé€šãªã
ãã§ã«ååšããŸãããããã§ãªãå Žåã¯ã次ã®ã¹ããŒãã¡ã³ããå«ããå¿ èŠããããŸãã
ã©ã€ãã©ãª $env 'libworld', 'world.c';
ããã§ãcons helloããšå ¥åãããšãããã°ã©ã ããªã³ã¯ãããåã«ã©ã€ãã©ãªãæ§ç¯ãããŸãã
ãã¡ããã`gcc' ã¯äž¡æ¹ã®ã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããããã«äœ¿çšãããŸã:
% çæããã«ã¡ã¯
gcc -c hello.c -o hello.o
gcc -c ã¯ãŒã«ã.c -o ã¯ãŒã«ã.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
ãªãŒãããã㯠& ã³ã³ããªãŒã äŸåé¢ä¿ åæ
Cons ã䜿çšãããšãäŸåé¢ä¿ãèªåçã«åŠçãããŸãã åã®äŸãç¶ãããšã次ã®ããšã«æ³šæããŠãã ããã
ç§ãã¡ãå€æŽãããšã world.c, äžç.o åã³ã³ãã€ã«ããã libworld.a åäœæããã ããã«ã¡ã¯
åãªã³ã¯:
% vi world.c
[ç·šé]
% çæããã«ã¡ã¯
gcc -c ã¯ãŒã«ã.c -o ã¯ãŒã«ã.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
ããã¯æ¯èŒçåçŽãªäŸã§ã: Cons ``ç¥ã£ãŠãã'' äžç.o äŸåãã world.cãçç±
äŸåé¢ä¿ã¯ã`Library' ã¡ãœããã«ãã£ãŠæ瀺çã«èšå®ãããŸãã ãããåãã£ãŠãã libworld.a
äŸåãã äžç.o ãã® ããã«ã¡ã¯ äŸåãã libworld.aããã¹ãŠåæ§ã®çç±ã§ã
ä»ããããå€æããŸãã ããã«ã¡ã¯C ã€ã³ã¿ãŒãã§ã€ã¹å®çŸ©ãã¡ã€ã«ãå«ãŸããŠããŸãã world.h:
% emacs world.h
[ç·šé]
% çæããã«ã¡ã¯
gcc -c hello.c -o hello.o
gcc -o ããã«ã¡ã¯ hello.o libworld.a
ã³ã³ã¹ã¯ã©ããã£ãŠãããç¥ã£ãŠããŸãã ããã«ã¡ã¯C å«ãŸ world.hããã® ããã«ã¡ã¯ã ãããã£ãŠã
åã³ã³ãã€ã«ïŒ ä»ã®ãšããããã©ãããèãããšãã¯ã ããã«ã¡ã¯ã èµ·ããŠãã-
ä»æ¥ãŸã§ãã³ã³ã¹ã¯ãã®äŸåé¢ä¿ã®ããã«ã¹ãã£ããŒãåŒã³åºããŸãã ããã«ã¡ã¯C. ãã®ã¹ãã£ããŒã¯ã
ã«ãã£ãŠå«ãŸãããã¡ã€ã« ããã«ã¡ã¯C ããããè¶ ããŠããããªãäŸåé¢ä¿ã®ãªã¹ããèãåºã
Cons ã¹ã¯ãªããã«ãã£ãŠæ瀺ãããŸãã ãã®ããã»ã¹ã¯ååž°çã§ãã
å«ãŸããŠãããã¡ã€ã«ãã¹ãã£ã³ãããŸãã
ããã¯é«ããªãã§ããïŒ çãã¯ãå Žåã«ãããŸãã 倧èŠæš¡ã·ã¹ãã ã®ãã«ãã«ããè¡ãå Žåã
ã¹ãã£ã³æéã¯ãããã§ãã 倧èŠæš¡ãªã·ã¹ãã ã®åæ§ç¯ãè¡ãå Žåãçæã¯
äœãããå¿ èŠããªããšå€æããåã«ãããªãã®æéããããŠããã«ã€ããŠèããŸã
å®äº (ãã ããmake ãããæéãããããšã¯éããŸãã!)ã è¯ããã¥ãŒã¹ã¯ãçæããããäœãããšã§ã
ããŒã«ã©ã€ãºãããå€æŽã«åãçµãã§ãããšãã«ããã«ããã€ã³ããªãžã§ã³ãã«ãµãã»ããåããã®ã¯éåžžã«ç°¡åã§ãã
ãªãŒããããã¯ å šäœç㪠ãã«ã ã·ãŒã±ã³ã·ã³ã°
ã³ã³ã¹ã¯å®å šãã€æ£ç¢ºãªäŸåé¢ä¿åæãè¡ãããããã°ããŒãã«ã«è¡ãããã
ã³ã³ã¹ã¯ãã®æ å ±ã䜿çšããŠããã«ãå šäœãå®å šã«å¶åŸ¡ã§ããŸãã ã·ãŒã±ã³ã·ã³ã°
ãã«ãã®ã ãã®é åºä»ãã¯ãäžèšã®äŸã§æããã§ããã次ã®ãã®ãšåçã§ãã
äŸåé¢ä¿ã®å®å šãªã»ãããèãããšãmake ã«æåŸ ããã§ãããã çæããããšãããã¯æ¡åŒµãããŸã
倧èŠæš¡ãªãã«ããã£ã¬ã¯ã㪠ãã«ãã«ç°¡åã«å¯Ÿå¿ã§ããŸãã ãã®çµæãé¢é£ãããã¹ãŠã®è€éãã
ãã«ããã¹éå±€ãå«ãããã«ããæ£ããç·šæãããŠããããšã確èªãã
builds -- ã¯åé€ãããŸãã ããã«ã€ããŠã¯ã次ã®ã»ã¯ã·ã§ã³ã§ããã«èª¬æããŸãã
å»ºç© å€§ æšââãŸã ãã as ã·ã³ãã«ãª
A éå±€ of ãã«ã ã¹ã¯ãªãã
Cons ã®ãã倧ããªãã«ãã¯ã次ã®éå±€ãäœæããããšã«ãã£ãŠç·šæãããŸãã ãã«ã ã¹ã¯ãªãã. é ç¹ã§
ããªãŒã®ã¹ã¯ãªãã㯠æ§ç¯ãã. æ £äŸã«ãããæ®ãã®ã¹ã¯ãªããã¯ãããã
åŒã°ããŸã 城éå µ. ãããã®ã¹ã¯ãªããã¯ãéåžžã«åçŽã«ãããã«ããã«ãã£ãŠçžäºã«æ¥ç¶ãããŠããŸãã
ããšã¯ã¹ããŒããããã³ãã€ã³ããŒããã³ãã³ãã
ã å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã command
`Build' ã³ãã³ãã¯ã 城éå µ ãã¡ã€ã«åãããã³ãããã
ãã«ãã«å«ãŸããŠããŸãã äŸãã°ïŒ
ãã«ã qw(
ãã©ã€ããŒ/ãã£ã¹ãã¬ã€/ã³ã³ã¹ã¯ãªãã
ãã©ã€ããŒ/ããŠã¹/ã³ã³ã¹ã¯ãªãã
ããŒãµãŒ/ã³ã³ã¹ã¯ãªãã
å ¬çäºæ¥/åŸŽå µ
);
ããã¯ããã«ã ã¹ã¯ãªããã®åçŽãª XNUMX ã¬ãã«ã®éå±€ã§ãã 城éå µ ãã¡ã€ã«
ãããã¬ãã«ã§èšåãããŠãã æ§ç¯ãã ãã¡ã€ã«ã ããªãŒå ã®ãã¹ãŠã®ãã£ã¬ã¯ããªã§ã¯ãªãããšã«æ³šæããŠãã ãã
ãã«ã ã¹ã¯ãªãããé¢é£ä»ããããŠããå¿ èŠããããŸãã
ããã¯ããã«ãã¬ãã« ã¹ã¯ãªãããšããŠèšè¿°ããããšãã§ããŸãã ããšãã°ã æ§ç¯ãã ãã¡ã€ã«ãããããªã
次ã®ã³ãã³ããå«ããŸãã
ãã«ã qw(
ããŒãµãŒ/ã³ã³ã¹ã¯ãªãã
ãã©ã€ããŒ/åŸŽå µ
å ¬çäºæ¥/åŸŽå µ
);
㚠城éå µ å ã®ãã¡ã€ã« ãã©ã€ã㌠ãã£ã¬ã¯ããªã«ã¯ãããå«ãŸããŠããå¯èœæ§ããããŸãïŒ
ãã«ã qw(
衚瀺/åŸŽå µ
ããŠã¹/åŸŽå µ
);
çµéšäžãåã®ã¢ãã«ã®æ¹ãç解ããããããšãããã£ãŠããŸãã
ã³ã³ã¹ãã©ã¯ã·ã§ã³ ããªãŒå šäœãç®ã®åã®æäžäœã«é 眮ãããŸãã ãã€ããªããã¹ããŒã ã¯
å¯èœã§ãã ã«çµã¿èŸŒãå¿ èŠããããåå¥ã«ç¶æãããã³ã³ããŒãã³ã
ããšãã°ããã«ã ããªãŒã¯ XNUMX ãæã§ãã«ã ããªãŒã«ããã¯ã§ããŸãããç¬èªã®å®çŸ©ãå®çŸ©ããŸãã
æ§ç¯éå±€ã
ããã©ã«ãã§ã¯ãCons ã¯ãã®äœæ¥ãã£ã¬ã¯ããªããã¡ã€ã«ãå«ããã£ã¬ã¯ããªã«å€æŽããŸããã
åäŒç€Ÿ 城éå µ ãããå«ãŸããŠãããã¡ã€ã«ã ãã®åäœã¯ããã«ãã«å¯ŸããŠæå¹ã«ããããšãã§ããŸã
æå®ããããã¬ãã« æ§ç¯ãã ãã¡ã€ã«ïŒ
Conscript_chdir 1;
æå¹ã«ãããšãã³ã³ã¹ã¯åäŒç€Ÿã«å€ãããŸã 城éå µ ãã¡ã€ã«ãå«ããã£ã¬ã¯ããª
ãã®ãã¡ã€ã«ãèªã¿èŸŒãã§ããéããã¡ã€ã«ãèªã¿èŸŒãŸããããããã¬ãã«ã®ãã£ã¬ã¯ããªã«æ»ããŸã
åŠçãããŸããã
Cons ã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ããã®åäœãããã©ã«ãã«ãªãããšãäºæ³ãããŸãã
ãã®ç§»è¡ã«åããããã«ãã³ã³ã¹ããã«ãã®æäžäœã«çãŸãããšãæåŸ ãããã«ã
åäŒç€Ÿã§èªã¿èŸŒã¿äž 城éå µ ãã¡ã€ã«ã¯ããã®æ©èœãæ瀺çã«ç¡å¹ã«ããå¿ èŠããããŸãã
以äžïŒ
Conscript_chdir 0;
çžå¯Ÿçã äžäœçžå¯Ÿã & 絶察㮠file å
Build ã³ãã³ãã«æå®ããããã¡ã€ã«åã¯ã
åŒã³åºãããã¹ã¯ãªããã®å Žæã ããã¯éåžžãä»ã®ãã¡ã€ã«åã«ãåœãŠã¯ãŸããŸã
ä»ã®ã³ãã³ããžã®åŒæ°ãåæ§ã§ãã
ãã¡ã€ã«åã«ããã·ã¥èšå·ã#ããä»ããå Žåããã®ãã¡ã€ã«ã¯å é ããã®çžå¯Ÿäœçœ®ã§è§£éãããŸãã
ã¬ãã« ãã£ã¬ã¯ã㪠( æ§ç¯ãã ãã¡ã€ã«ãååšããŸã)ã ãããŠãé©ãããšã§ã¯ãããŸãããããããå§ãããš
``/'' ã䜿çšãããšã絶察ãã¹åãšèŠãªãããŸãã ããã¯ã·ã¹ãã äžã§ãåœãŠã¯ãŸããŸã
ã¹ã©ãã·ã¥ã§ã¯ãªãããã¯ã¹ã©ãã·ã¥ã䜿çšããŠçµ¶å¯Ÿãã¹ã«ååãä»ããŸãã
䜿ãæ¹ ã¢ãžã¥ãŒã« in ãã«ã ã¹ã¯ãªãã
ã¢ãžã¥ãŒã«ãããããã«ãã«ã§ããŸã 城éå µ éåžžã® Perl ã®ãuseããŸãã¯ãrequireãã䜿çšãããã¡ã€ã«
æïŒ
è±èªã䜿ã;
My::ã¢ãžã¥ãŒã«ãå¿ èŠã§ãã
ããããã®ãuseããŸãã¯ãrequireãã¯ãXNUMX ã€ã ãã«åœ±é¿ããŸãã 城éå µ 衚瀺ããããã¡ã€ã«ã ã䜿çšããã«ã¯
è€æ°ã®ã¢ãžã¥ãŒã« 城éå µ ãã¡ã€ã«ããšã«ãuseããŸãã¯ãrequireãã¹ããŒãã¡ã³ããé 眮ããå¿ èŠããããŸã
ã¢ãžã¥ãŒã«ãå¿ èŠãªãã®ã
察象é å of variables
ãããã¬ãã« æ§ç¯ãã ãã¡ã€ã«ãšãã¹ãŠ 城éå µ ãã¡ã€ã«ã¯å ±éã®åå¥ã® Perl ã§å§ãŸããŸã
ããã±ãŒãžã ãã¡ãªãã ããã±ãŒãžã®ã·ã³ãã« ããŒãã«ãå¶åŸ¡ããŠããã®ã·ã³ãã« ããŒãã«ã
ãé€ããŠãåã¹ã¯ãªããã¯ç©ºã§ãã æ§ç¯ãã ã³ãã³ãã©ã€ã³ã®äžéšãååŸãããã¡ã€ã«
åŒæ°ã ãããã£ãŠãèšå®ãŸãã¯äœ¿çšããããã¹ãŠã®å€æ°ã¯ãã¹ã¯ãªããã«ãã£ãŠèšå®ãããŸãã
å€éšã¹ã¯ãªããã«ãããã®ã§ã¯ãããŸããã
å€æ°ã¯æ瀺çã« èŒžå ¥ããã 芪ã¹ã¯ãªããããã®ã¹ã¯ãªããã«ãã£ãŠã ãã€ã³ããŒãããã«ã¯
å€æ°ãã ã£ãã«éããªã 茞åºããã 芪ã«ãã£ãŠåæåãããŸã (ãã以å€ã®å Žåã¯ãšã©ãŒ
çºçããŸãïŒã
ã èŒžåº command
ããšã¯ã¹ããŒããã³ãã³ãã¯ã次ã®äŸã®ããã«äœ¿çšãããŸãã
$env = æ°ããã³ã³ã¹();
$INCLUDE = "#export/include";
$LIB = "#export/lib";
qw( env INCLUDE LIB ); ããšã¯ã¹ããŒãããŸãã
ãã«ã qw( util/Conscript );
ããšã¯ã¹ããŒãããªã¹ãã«èšèŒãããŠããåçŽãªå€æ°ã®å€ã¯ãåãé€ãããŸã
åŸç¶ã®ããã«ããã³ãã³ãã«ãã£ãŠã ããšã¯ã¹ããŒããã³ãã³ã㯠Perl ã®ã¿ããšã¯ã¹ããŒãããŸã ã¹ã«ã©ãŒ
ã€ãŸããååã `$' ã§å§ãŸãå€æ°ã§ãã ãã®ä»ã®å€æ°ããªããžã§ã¯ããªã©
åç §ã«ãã£ãŠãšã¯ã¹ããŒãã§ããŸããããã¹ãŠã®ã¹ã¯ãªããã¯åããªããžã§ã¯ããåç §ããŸãã
ãªããžã§ã¯ãã¯ãè£å©ã¹ã¯ãªããããã³å ã®ã¹ã¯ãªããã«ãã£ãŠèªã¿åãå°çšã§ãããšèŠãªãããå¿ èŠããããŸãã
ã¹ã¯ãªããããšã¯ã¹ããŒãããŠããŸãã ãã ãããšã¯ã¹ããŒããããã¹ã«ã©ãŒã«æ°ããå€ãå²ãåœãŠãããšã¯èš±å®¹ãããŸã
variable -- åç §ãããåºã«ãªãå€æ°ã¯å€æŽãããŸããã ãã®ã·ãŒã±ã³ã¹ã¯ã
äŸãOKã§ãïŒ
$env = æ°ããã³ã³ã¹();
qw( env INCLUDE LIB ); ããšã¯ã¹ããŒãããŸãã
ãã«ã qw( util/Conscript );
$env = new cons(CFLAGS => '-O');
ãã«ã qw( other/Conscript );
å€æ°ãããšã¯ã¹ããŒããã³ãã³ãã®åãŸãã¯åŸã«èšå®ãããŠãããã©ããã¯åé¡ã§ã¯ãããŸããã ã®
éèŠãªããšã¯ã`Build' ã³ãã³ããå®è¡ããããšãã®å€æ°ã®å€ã§ãã
ããããªã¹ãè¿œãæããã®ã§ãã ã¡ãªã¿ã«ããã®åŸã®ããšã¯ã¹ããŒããã³ãã³ãã¯ã
æåã®ç¡å¹å: ããããã§ãšã¯ã¹ããŒãããããã¹ãŠã®å€æ°ã«èšåããå¿ èŠããããŸã
ããšã¯ã¹ããŒããã³ãã³ãã
ã ã€ã³ããŒã command
ããšã¯ã¹ããŒããã³ãã³ãã«ãã£ãŠãšã¯ã¹ããŒããããå€æ°ã¯ã
ãã€ã³ããŒããã³ãã³ãã è£å©ã¹ã¯ãªããã¯åžžã«å€æ°ãçŽæ¥ã€ã³ããŒãããŸãã
åªããã¹ã¯ãªããã 次ã®äŸãæ€èšããŠãã ããã
ã€ã³ããŒã qw( env INCLUDE );
ããã¯ã芪ã¹ã¯ãªããã `$env' ãš `$INCLUDE' ã®äž¡æ¹ããšã¯ã¹ããŒãããå Žåã«ã®ã¿æå¹ã§ãã ããã¯ãŸãããªããã°ãªããªã
ãããã®å€æ°å€ã®ããããã«äžããããŠããŸãã ãµãã¹ã¯ãªããã®ã¿ã§ãOK
ãšã¯ã¹ããŒããããå€æ°ã®ãµãã»ãããã€ã³ããŒãããŸã (ãã®äŸã§ã¯ãã«ãã£ãŠãšã¯ã¹ããŒãããã `$LIB'
åã®äŸã§ã¯ã€ã³ããŒããããŸãã)ã
ã€ã³ããŒããããå€æ°ã¯ãã¹ãŠèªåçã«åãšã¯ã¹ããŒãããããããã·ãŒã±ã³ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
qw ãã€ã³ããŒãããŸã ( env INCLUDE );
ãã«ã qw (underly-me/Conscript);
`$env' ãš `$INCLUDE' ã®äž¡æ¹ãè£å©ãã¡ã€ã«ã«æäŸããŸãã `$env' ã®ã¿ãæå®ããå Žå
ãšã¯ã¹ããŒããããå Žåã次ã§ååã§ãã
qw ãã€ã³ããŒãããŸã ( env INCLUDE );
qw ( env ) ããšã¯ã¹ããŒãããŸãã
ãã«ã qw (underly-me/Conscript);
èšããŸã§ããªããå€æ°ã¯ããã«ããå®è¡ããåã«ããŒã«ã«ã§å€æŽã§ããŸãã
ãµãã¹ã¯ãªããã
å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã ã¹ã¯ãªãã è©äŸ¡ 泚æ
ãã«ã ã¹ã¯ãªããã®é åºã«é¢ããå¯äžã®å¶çŽã¯ãäžäœã®ã¹ã¯ãªããã
äžäœã¹ã¯ãªããã®åã«è©äŸ¡ãããŸãã ãããã¬ãã« æ§ç¯ãã ããšãã°ããã¡ã€ã«ã¯
æåã«è©äŸ¡ããããã®åŸã«äžäœã®ã¹ã¯ãªãããç¶ããŸãã ããã¯ããªããæ¬åœã«ç¥ãå¿ èŠããããã¹ãŠã§ã
è©äŸ¡ã®é åºã«ã€ããŠã¯ãäžè¬çã«é åºã¯ç¡é¢ä¿ã§ããããã§ãã 次ã®ããšãèæ ®ããŠãã ãã
ããã«ããã³ãã³ã:
ãã«ã qw(
ãã©ã€ããŒ/ãã£ã¹ãã¬ã€/ã³ã³ã¹ã¯ãªãã
ãã©ã€ããŒ/ããŠã¹/ã³ã³ã¹ã¯ãªãã
ããŒãµãŒ/ã³ã³ã¹ã¯ãªãã
å ¬çäºæ¥/åŸŽå µ
);
ã¹ã¯ãªããåãã¢ã«ãã¡ãããé ã«äžŠã¹ãããšã«ããŸããã
ã¡ã³ããã³ã¹ã«äŸ¿å©ã é çªãå€ããŠãå€ãããªã
ãã«ãã
A ã¢ãã« for ã·ã§ã¢ãªã³ã° ãã¡ã€ã«
äžéš ã·ã³ãã«ãª èŠå
è€éãªãœãããŠã§ã¢ ã·ã¹ãã ã§ã¯ããã«ã ãããã¯ããå ±æããæ¹æ³ãå¿ èŠã§ãã
èšç«ã å®è£ ããã®ãç°¡åãªåçŽãªäžé£ã®èŠåãææ¡ããŸã
çæã§ãããéåžžã«å¹æçã§ãã
åºæ¬çãªã«ãŒã«ã¯ãå ±æããå¿ èŠããããã¹ãŠã®ãã«ã補åãèŠæ±ããããšã§ã
ãã£ã¬ã¯ããªã¯äžéãã£ã¬ã¯ããªãä»ããŠå ±æãããŸãã ç§ãã¡ã¯éåžžããããåŒãã§ããŸã
exportãããã³ C ç°å¢ã§ã¯ããã®ãã£ã¬ã¯ããªã®åŸæ¥ã®ãµããã£ã¬ã¯ããªãæäŸãã
ãªã© include, ãªã, ãã³, etc.
ãããã®ãã£ã¬ã¯ããªã¯ãæäžäœã® æ§ç¯ãã ãã¡ã€ã«ã ã·ã³ãã«ãª æ§ç¯ãã ãã¡ã€ã«
a ããã«ã¡ã¯ã äžçïŒ è€æ°ã®ãã£ã¬ã¯ããªã䜿çšããŠç·šæãããã¢ããªã±ãŒã·ã§ã³ã¯ã次ã®ããã«ãªããŸãã
# Hello, World! ã®ã³ã³ã¹ãã©ã¯ã ãã¡ã€ã«
# ãã¹ãŠã®å ±æ補åãã©ãã«çœ®ããã
$EXPORT = '#ãšã¯ã¹ããŒã';
Export qw(CONS INCLUDE LIB BIN );
# 補åãå ±æããããã®æšæºãã£ã¬ã¯ããªã
$INCLUDE = "$EXPORT/include";
$LIB = "$EXPORT/lib";
$BIN = "$EXPORT/ãã³";
# æšæºçãªæ§ç¯ç°å¢ã
$CONS = æ°ããçæ (
CPPPATH => $INCLUDE, # C ã³ã³ãã€ã«ã®ã€ã³ã¯ã«ãŒã ãã¹
LIBPATH => $LIB, # ããã°ã©ã ããªã³ã¯ããããã®ã©ã€ãã©ãª ãã¹
LIBS => '-lworld', # æšæºã©ã€ãã©ãªã®ãªã¹ã
);
ãã«ã qw(
ããã«ã¡ã¯/åŸŽå µ
äžç/åŸŽå µ
);
ã äžç ãã£ã¬ã¯ããªã® 城éå µ ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
# ãã£ã¬ã¯ããªã¯ãŒã«ãã®ã³ã³ã¹ã¯ãªãããã¡ã€ã«
import qw( CONS INCLUDE LIB );
# ãã®ãã£ã¬ã¯ããªã®è£œåãã€ã³ã¹ããŒã«ããŸã
$CONS $LIB, 'libworld.a' ãã€ã³ã¹ããŒã«ããŸãã
$CONS $INCLUDE, 'world.h'; ãã€ã³ã¹ããŒã«ããŸãã
# å éšè£œå
ã©ã€ãã©ãª $CONS 'libworld.a', 'world.c';
ãš ããã«ã¡ã¯ ãã£ã¬ã¯ããªã® 城éå µ ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
# ãã£ã¬ã¯ã㪠hello ã®ã³ã³ã¹ã¯ãªãã ãã¡ã€ã«
qw( CONS BIN ); ãã€ã³ããŒãããŸãã
# 茞åºè£œå
$CONS $BIN, 'hello'; ãã€ã³ã¹ããŒã«ããŸãã
# å éšè£œå
ããã°ã©ã $CONS 'hello', 'hello.c';
æ§ç¯ããã«ã¯ ããã«ã¡ã¯ã äžçïŒ ãã®ãã£ã¬ã¯ããªæ§é ãæã€ããã°ã©ã ã§ãæäžäœã«ç§»åããŸã
ãã£ã¬ã¯ããªã«ç§»åããé©åãªåŒæ°ãæå®ããŠãconsããåŒã³åºããŸãã 次ã®äŸã§ã¯ã
Consã«ãã£ã¬ã¯ããªãæ§ç¯ããããã«æ瀺ããŸã export. ãã£ã¬ã¯ããªãæ§ç¯ããããã«ãCons ã¯ãã¹ãŠãååž°çã«æ§ç¯ããŸãã
ãã®ãã£ã¬ã¯ããªå ã®æ¢ç¥ã®è£œå (ãã¡ãããåæ§ç¯ãå¿ èŠãªå Žåã®ã¿)ã ããããã®å Žå
ãããã®è£œåã¯ä»ã®ãã£ã¬ã¯ããªå ã®ä»ã®è£œåã«äŸåããŠããããããã¯æ§ç¯ãããŸãã
ã®ããã«ãã³ãæã€æéãèŠã€ããŠããŸãã
% cons ãšã¯ã¹ããŒã
world/world.h ã export/include/world.h ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -Iexport/include -c hello/hello.c -o hello/hello.o
cc -Iexport/include -c world/world.c -o world/world.o
a r world/libworld.a world/world.o
ar: world/libworld.a ãäœæããŠããŸã
ranlib ã¯ãŒã«ã/libworld.a
world/libworld.a ã export/lib/libworld.a ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -o ããã«ã¡ã¯/ããã«ã¡ã¯ ããã«ã¡ã¯/hello.o -Lexport/lib -lworld
hello/hello ã export/bin/hello ãšããŠã€ã³ã¹ããŒã«ããŸã
æé€ã ç解ã§ããã å Žæã«äŸåããªã ã¹ã¯ãªãã
ãã® XNUMX ã€ã¯ 城éå µ ãã¡ã€ã«ã¯éåžžã«ãããã§èŠç¹ãã¯ã£ããããŠããŸãã 圌ãã¯åã«
ãã£ã¬ã¯ããªã®è£œåãšãããã®è£œåã®ãã«ãæ¹æ³ãæå®ããŸãã ãã«ãæé
æå°é: 䜿çšããã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ã補ååã
ããã³å ¥åã®ååã ã¹ã¯ãªããã¯å Žæã«äŸåããªãããšã«ã泚æããŠãã ããã
ãœãŒã¹ ããªãŒãåç·šæãããå Žåã¯ãèªç±ã«å€æŽã§ããŸããå€æŽããå¿ èŠãããã®ã¯ã
æ§ç¯ãã ãã¡ã€ã« (ãã®äŸã§ã¯) ã䜿çšããŠãæ°ããå Žæãæå®ããŸãã 城éå µ ãã¡ã€ã«ã ã¶ã»
ãšã¯ã¹ããŒã ããªãŒã䜿çšãããšããã®ç®æšã容æã«ãªããŸãã
ãŸããCons ã现ããªåŠçãã©ã®ããã«åŠçãããã«ã泚ç®ããŠãã ããã å šãŠã® export ãã£ã¬ã¯ããªã
ããšãã°ãèªåçã«äœæãããŸããã ãããŠãã€ã³ã¹ããŒã«ããããã¡ã€ã«ã¯å®éã«ããŒããªã³ã¯ãããŠããŸãã
ã¹ããŒã¹ãšæéãç¯çŽããããã®ãããããã®ãšã¯ã¹ããŒã ãã£ã¬ã¯ããªã 现éšãžã®ãã®æ³šæã¯æããŸã
ã·ã³ãã«ã§ä¿å®ããããã¹ã¯ãªããã®äœæãããã«ç°¡åã«ãªããŸãã
åãã source & ãã«ã æš
å€ãã®å Žåããã«ãããã®æŽŸçãã¡ã€ã«ãå®å šã«åé¢ããŠããããšãæãŸããã§ãã
ãœãŒã¹ãã¡ã€ã«ã ããã«ããããœãŒã¹ãã¡ã€ã«ãäœã§ãããã远跡ããããšãã¯ããã«ç°¡åã«ãªããŸã.
ãŸããåãæ±ããç°¡åã«ãªããŸã ç°åœ¢ ãã«ããç¹ã«ããªã¢ã³ã ãã«ããå¿ èŠãªå Žå
å ±åããããšã
åãã ãã«ã & source ãã£ã¬ã¯ã㪠ã ãªã³ã¯ command
Cons ã¯ãããããã¹ãŠã®èŠä»¶ãåŠçããåçŽãªã¡ã«ããºã ãæäŸããŸãã ããªã³ã¯ã
ã³ãã³ãã¯ã次ã®äŸã®ããã«åŒã³åºãããŸãã
Link 'build' => 'src';
æå®ããããã£ã¬ã¯ããªã¯ãæå®ããããœãŒã¹ ãã£ã¬ã¯ããªã«ããªã³ã¯ããããŸãã ä»®å®ããŸããã
ãœãŒã¹ãã£ã¬ã¯ããªãã»ããã¢ãããã SRCããµããã£ã¬ã¯ããªãšãšãã« äžç & ããã«ã¡ã¯ ãã®äžã«ã
åã®äŸã®ããã«ã ãã®åŸãå ã®ãã«ãã©ã€ã³ã眮ãæããããšãã§ããŸã
次ã®ãšããã§ãã
ãã«ã qw(
ãã«ã/ã¯ãŒã«ã/ã³ã³ã¹ã¯ãªãã
ãã«ã/ããã«ã¡ã¯/ã³ã³ã¹ã¯ãªãã
);
ããªããæ±ãããšã«æ³šæããŠãã ãã 城éå µ ãã«ã ãã£ã¬ã¯ããªã«ååšãããã®ããã«ãã¡ã€ã«ãäœæããŸãã ä»ãªã
åãšåãã³ãã³ããå ¥åãããšã次ã®çµæãåŸãããŸãã
% cons ãšã¯ã¹ããŒã
build/world/world.h ã export/include/world.h ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -Iexport/include -c build/hello/hello.c -o build/hello/hello.o
cc -Iexport/include -c build/world/world.c -o build/world/world.o
a r build/world/libworld.a build/world/world.o
ar: build/world/libworld.a ãäœæããŠããŸã
ranlib build/world/libworld.a
build/world/libworld.a ã export/lib/libworld.a ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -o ãã«ã/hello/hello ãã«ã/hello/hello.o -Lexport/lib -lworld
build/hello/hello ã export/bin/hello ãšããŠã€ã³ã¹ããŒã«ããŸã
ç¹°ãè¿ããŸãããCons ã詳现ãåŠçããŠãããŸãã ç¹ã«ããã¹ãŠã®ããšã«æ°ä»ãã§ãããã
ãã«ãã¯ããã«ã ãã£ã¬ã¯ããªã®ãœãŒã¹ ãã¡ã€ã«ãšãªããžã§ã¯ã ãã¡ã€ã«ã䜿çšããŠè¡ãããŸãã çºã«
äŸã ãã«ã/ã¯ãŒã«ã/ã¯ãŒã«ã.o ããã³ã³ãã€ã«ãããŸã ãã«ã/ã¯ãŒã«ã/ã¯ãŒã«ã.c,
ãšã¯ã¹ããŒã/ã€ã³ã¯ã«ãŒã/world.h ããã€ã³ã¹ããŒã«ãããŸã ãã«ã/ã¯ãŒã«ã/ã¯ãŒã«ã.h. ããã¯ãã»ãšãã©ã®å Žåã«éæãããŸã
åãœãŒã¹ããå¿ èŠãªãã¡ã€ã«ããããŒãããªã³ã¯ãããšããåçŽãªæ段ã«ããã·ã¹ãã
ãã£ã¬ã¯ããªãé©åãªãã«ã ãã£ã¬ã¯ããªã«ã³ããŒããŸãã
ãœãŒã¹ãã£ã¬ã¯ããªã«å¯ŸããŠäœãããŠãããªã³ã¯ã¯ Cons ã«ãã£ãŠæ£ããç¶æãããŸãã
ãœãŒã¹ãã¡ã€ã«ãå€æŽããå Žåããšãã£ã¿ã¯ãããããã®å Žã§ãè¡ãããååãå€æŽããå ŽåããããŸã
æåã«æ°ãããã¡ã€ã«ãäœæããŸãã åŸè ã®å Žåããã¹ãŠã®ããŒã ãªã³ã¯ã倱ãããŸãã çæã¯
次ã«ãœãŒã¹ ãã¡ã€ã«ãå¿ èŠã«ãªã£ããšãã«ãã®ç¶æ ãæ€åºããåãªã³ã¯ããŸãã
é©åã«ã
ã¡ãªã¿ã«ã次ã®ããšã«ãæ°ä»ãã§ãããã ããã åºç€ã«å€æŽãå¿ èŠã§ãã 城éå µ
ãã¡ã€ã«ã 次ã®ã»ã¯ã·ã§ã³ã§èª¬æããããã«ãããã«å ã«é²ãããšãã§ããŸãã
ããªã¢ã³ã æ§ç¯ããŸã
ããã«ã¡ã¯ã äžçïŒ for ããã & æ¡ OS
ããªã¢ã³ã ãã«ãã«ã¯ãåçŽãªæ¡åŒµæ©èœããã XNUMX ã€å¿ èŠã§ãã äŸãšããŠ
baNaNa ãš peAcH ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®äž¡æ¹ã®ãã«ããèš±å¯ããå¿ èŠããããŸãã ãã®å Žåã
NFS ãªã©ã®åæ£ãã¡ã€ã« ã·ã¹ãã ã䜿çšããŠç¹å®ã®ã·ã¹ãã ã«ã¢ã¯ã»ã¹ããŠããã
ããããã®ã·ã¹ãã ã®ã¿ãç¹å®ã®åŒã³åºãã«å¯ŸããŠã³ã³ãã€ã«ããå¿ èŠããããŸãã
ãçæãã èšå®æ¹æ³ã® XNUMX ã€ã次ã«ç€ºããŸãã æ§ç¯ãã ç§ãã¡ã®ãã¡ã€ã« ããã«ã¡ã¯ã äžçïŒ
ã¢ããªã±ãŒã·ã§ã³ïŒ
# Hello, World! ã®ã³ã³ã¹ãã©ã¯ã ãã¡ã€ã«
$OS = $ARG{OS} ã§ãªãéããdie qq(OS ãæå®ããå¿ èŠããããŸã);
die qq(OSã¯ãpeachãããbananaãã§ããå¿ èŠããããŸã)
if $OS ne "æ¡" && $OS ne "ããã";
# ãã¹ãŠã®å ±æ補åãã©ãã«çœ®ããã
$EXPORT = "#export/$OS";
Export qw(CONS INCLUDE LIB BIN );
# 補åãå ±æããããã®æšæºãã£ã¬ã¯ããªã
$INCLUDE = "$EXPORT/include";
$LIB = "$EXPORT/lib";
$BIN = "$EXPORT/ãã³";
# æšæºçãªæ§ç¯ç°å¢ã
$CONS = æ°ããçæ (
CPPPATH => $INCLUDE, # C ã³ã³ãã€ã«ã®ã€ã³ã¯ã«ãŒã ãã¹
LIBPATH => $LIB, # ããã°ã©ã ããªã³ã¯ããããã®ã©ã€ãã©ãª ãã¹
LIBS => '-lworld', # æšæºã©ã€ãã©ãªã®ãªã¹ã
);
# $BUILD ã¯ããã¹ãŠã掟çãããå Žæã§ãã
$BUILD = "#build/$OS";
# $BUILD ã®ãœãŒã¹ ãã¡ã€ã«ãã©ãã«ãããã cons ã«äŒããŸãã
ãªã³ã¯ $BUILD => 'src';
建ãŠã ïŒ
"$BUILD/hello/Conscript",
"$BUILD/ã¯ãŒã«ã/ã³ã³ã¹ã¯ãªãã",
);
peAcH ã·ã¹ãã ã«ãã°ã€ã³ãããšã ããã«ã¡ã¯ã äžçïŒ ãã®ããã®ã¢ããªã±ãŒã·ã§ã³
ãã©ãããã©ãŒã ïŒ
% cons ãšã¯ã¹ããŒã OS=peach
build/peach/world/world.h ã export/peach/include/world.h ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -Iexport/peach/include -c build/peach/hello/hello.c -o build/peach/hello/hello.o
cc -Iexport/peach/include -c build/peach/world/world.c -o build/peach/world/world.o
a r build/peach/world/libworld.a build/peach/world/world.o
ar: build/peach/world/libworld.a ãäœæäž
ranlib ãã«ã/ããŒã/ã¯ãŒã«ã/libworld.a
build/peach/world/libworld.a ã export/peach/lib/libworld.a ãšããŠã€ã³ã¹ããŒã«ããŸãã
cc -o build/peach/hello/hello build/peach/hello/hello.o -Lexport/peach/lib -lworld
build/peach/hello/hello ã export/peach/bin/hello ãšããŠã€ã³ã¹ããŒã«ããŸã
ããªãšãŒã·ã§ã³ on a ããŒã
ãã®ã¢ãã«ã®ä»ã®ããªãšãŒã·ã§ã³ãå¯èœã§ãã ããšãã°ã
ã€ã³ã¯ã«ãŒã ãã¡ã€ã«ããã©ãããã©ãŒã ã«äŸåãããã¡ã€ã«ãšãã©ãããã©ãŒã ã«äŸåããªããã¡ã€ã«ã«åããŸãã
ãã®å Žåããã©ãããã©ãŒã äŸåã® $INCLUDE ã®ä»£æ¿ãå®çŸ©ããå¿ èŠããããŸãã
ãã¡ã€ã«ã å€ã㮠城éå µ çŽç²ã«ãã©ãããã©ãŒã ã«äŸåããªãã€ã³ã¯ã«ãŒã ãã¡ã€ã«ãçæãããã¡ã€ã«ã¯ã
å€æŽããå¿ èŠã¯ãããŸããã
ãŸãããããã°ããããã¡ã€ãªã³ã°ã䜿çšããŠã·ã¹ãã å šäœãã³ã³ãã€ã«ã§ããããã«ããããšãã§ããŸãã
ããšãã°ãæå¹ã«ããŸãã ããã¯ã次ã®ãããªé©åãªã³ãã³ã ã©ã€ã³ ãªãã·ã§ã³ã䜿çšããŠè¡ãããšãã§ããŸãã
`DEBUG=ãªã³'ã ããã¯ãé©åãªãã©ãããã©ãŒã åºæã®
ãããã°ãæå¹ã«ããããã®èŠä»¶ (ããã«ã¯ãæé©åããªãã«ããããšãå«ãŸããå ŽåããããŸãã
äŸïŒã ãªãã·ã§ã³ã§ããããã®ç°ãªãã¿ã€ãã®ã·ã¹ãã ã®åå空éãå€ããããšãã§ããŸãã
ãããã次ã®ã»ã¯ã·ã§ã³ã§èª¬æããããã«ãããã§ã¯ãããŸãã æ¬è³ªç㪠ã³ã³ã¹ã¯ããããªã®ã§ããããè¡ãã«ã¯
ãªãã·ã§ã³ãå€æŽãããšãã«ç©äºãåæ§ç¯ããã®ãè³¢æã§ãã
眲å
MD5 æå· çœ²å
Cons ã掟çãã¡ã€ã«ãäœæãããšãã¯ãã€ã§ãã 眲å ãã®ãã¡ã€ã«ã®ããã«ã 眲å
ãã£ã¬ã¯ããªããšã« XNUMX ã€ã®å¥ã®ãã¡ã€ã«ã«æ ŒçŽãããŸãã åã®äŸãã³ã³ãã€ã«ããåŸã
ã ãå§èš å ã®ãã¡ã€ã« ãã«ã/ããŒã/ã¯ãŒã«ã ãã£ã¬ã¯ããªã¯æ¬¡ã®ããã«ãªããŸãã
world.o:834179303 23844c0b102ecdc0b4548d1cd1cbd8c6
libworld.a:834179304 9bf6587fa06ec49d864811a105222c00
æåã®æ°åã¯ã¿ã€ã ã¹ã¿ã³ãã§ããUNIX ã·ã¹ãã ã®å Žåãããã¯éåžžã
1 幎 1970 æ 5 æ¥ããã®ç§æ°ãXNUMX çªç®ã®å€ã¯ MDXNUMX ãã§ãã¯ãµã ã§ãã ã® ã¡ãã»ãŒãž ãã€ãžã§ã¹ã
ã¢ã«ãŽãªãºã å ¥åæååãæå®ããŠã匷åãªæå·ãèšç®ããã¢ã«ãŽãªãºã ã§ãã
ãã®æååã®çœ²åã ã«æ ŒçŽãããŠãã MD5 ãã§ãã¯ãµã ãå§èš ãã¡ã€ã«ã¯ãäºå®äžã
æå®ããããã¡ã€ã«ã®ãã¹ãŠã®äŸåé¢ä¿æ å ±ã®ãã€ãžã§ã¹ãã ããšãã°ã
äžç.o ãã¡ã€ã«ãããã«ã¯å°ãªããšã world.c ãã¡ã€ã«ãããã³ã³ã³ã¹ãããã¹ãŠã®ããã㌠ãã¡ã€ã«
çŽæ¥çãŸãã¯éæ¥çã«å«ãŸããŠããããšãç¥ã£ãŠãã world.cã ããã ãã§ãªãã
çæã«äœ¿çšãããå®éã®ã³ãã³ãã©ã€ã³ äžç.o ã®èšç®ã«ãäŸçµŠãããŸã
眲åã åæ§ã«ã libworld.a ãã¹ãŠããå«ãã眲åãååŸããŸã
ãã®æ§æèŠçŽ ã®çœ²å (ãããã£ãŠãæšç§»çã«ãã®çœ²å ã¢ããªç°å¢ã«åãããŠ
ã³ã³ã¹ãã£ãã¥ãšã³ã)ãããã³ãã¡ã€ã«ãäœæããã³ãã³ãã©ã€ã³ã
é掟çãã¡ã€ã«ã®çœ²åã¯ãããã©ã«ãã§ãçŸåšã®
ãã¡ã€ã«ã®å€æŽæå»ãšãã¡ã€ã«ã®ãšã³ããªå (ããŸããŸå€æŽããã£ãå Žåãé€ã)
çŸåš ãå§èš ãã®å Žåããã®çœ²åã䜿çšãããŸã)ã
掟çãã¡ã€ã«ãç¹å®ã®ãã¡ã€ã«ã«äŸåããå¿ èŠããªãããšã«æ³šæããŠãã ããã æ§ç¯ãã or
城éå µ file -- ãããã®ãã¡ã€ã«ãžã®å€æŽãåé¡ã®ãã¡ã€ã«ã«åœ±é¿ããå Žåãããã¯
ã³ãã³ãã©ã€ã³ã®é¢é£éšåã¯
眲åã«å«ãŸããŠããŸãã ç¡é¢ä¿ãªå€æŽã¯å¹æããããŸããã
Cons ãç¹å®ã®ãã¡ã€ã«ã掟çããããã©ãããæ€èšãããšãããŸãã
ãã¡ã€ã«ã®äºæ³ããã眲åã 次ã«ããã¡ã€ã«ã®æçµå€æŽæå»ãæ¯èŒããŸã
ã«èšé²ãããæé ãå§èš ãšã³ã㪠(ååšããå Žå)ã ãããã®æéãäžèŽããå Žåã
ã«ä¿åãããŠãã眲å ãå§èš ãã¡ã€ã«ã¯æ£ç¢ºã§ãããšèŠãªãããŸãã ãã¡ã€ã«ã以åã®å Žå
眲åãæ°ããäºæ³ããã眲åãšäžèŽããªãå Žåããã¡ã€ã«ãåçæããå¿ èŠããããŸãã
äŸåãã¡ã€ã«ã«é¢ããäœããå€æŽããããã³ã«ããã¡ã€ã«ãå掟çãããããšã«æ³šæããŠãã ããã ã®
ç¹ã«ã泚æããŠãã ãã ã©ãã åŸå±ã®å€æŽæéãžã®å€æŽ (åæ¹ãŸãã¯
éæ¹å) ã¯ã掟çãã¡ã€ã«ã®åã³ã³ãã€ã«ã匷å¶ããŸãã
ãããã®çœ²åã®äœ¿çšã¯ãéåžžã«åçŽã§å¹ççãã€å¹æçãªæ¹æ³ã§ãã
ã·ã¹ãã ã®åçŸæ§ãåçã«æ¹åããŸãã
ç°¡åãªäŸã§ããã瀺ããŸãã
# ã·ã³ãã«ãªãHello, World!ã æ§æãã¡ã€ã«
$CFLAGS = '-g' if $ARG{DEBUG} eq 'on';
$CONS = æ°ããã³ã³ã¹(CFLAGS => $CFLAGS);
ããã°ã©ã $CONS 'hello', 'hello.c';
Cons ãé©åãªã¿ã€ãã³ã°ã§åã³ã³ãã€ã«ãããããšã«æ³šæããŠãã ããã
% çæããã«ã¡ã¯
cc -c ããã«ã¡ã¯.c -o ããã«ã¡ã¯.o
cc -o ããã«ã¡ã¯ hello.o
% çæããã«ã¡ã¯
çæïŒãããã«ã¡ã¯ãã¯ææ°ã§ãã
% cons DEBUG=on ããã«ã¡ã¯
cc -g -c ãããŒ.c -o ãããŒ.o
cc -o ããã«ã¡ã¯ hello.o
% cons DEBUG=on ããã«ã¡ã¯
çæïŒãããã«ã¡ã¯ãã¯ææ°ã§ãã
% çæããã«ã¡ã¯
cc -c ããã«ã¡ã¯.c -o ããã«ã¡ã¯.o
cc -o ããã«ã¡ã¯ hello.o
Code ãªããžããª
å€ãã®ãœãããŠã§ã¢éçºçµç¹ã«ã¯ãXNUMX ã€ä»¥äžã®äžå€®ãªããžã㪠ãã£ã¬ã¯ããªããããŸãã
XNUMX ã€ãŸãã¯è€æ°ã®ãããžã§ã¯ãã®çŸåšã®ãœãŒã¹ ã³ãŒããšæŽŸçãããœãŒã¹ ã³ãŒããå«ãããªãŒ
ãªããžã§ã¯ã ãã¡ã€ã«ãã©ã€ãã©ãªãããã³å®è¡å¯èœãã¡ã€ã«ã äžèŠãªåã³ã³ãã€ã«ãæžããããã«ã
ãªããžããªã®ãã¡ã€ã«ã䜿çšããŠéçºãœãããŠã§ã¢ããã«ããããšäŸ¿å©ã§ãã
ãã¡ãããããŒã«ã« ãã«ã ããªãŒã«æ°ããäŸåé¢ä¿ãã¡ã€ã«ãååšããªãããšã確èªããŠãã ããã
å庫
Cons ã¯ãæ€çŽ¢ãããã³ãŒã ãªããžããªã®ãªã¹ããæå®ããã¡ã«ããºã ãæäŸããŸãã
ããŒã«ã« ãã«ã ãã£ã¬ã¯ã㪠ããªãŒã«èŠã€ãããªããœãŒã¹ ãã¡ã€ã«ããã³æŽŸçãã¡ã€ã«ã®å Žåã
次ã®è¡ æ§ç¯ãã ãã¡ã€ã«ã¯ãã³ã³ã¹ã«æåã«ä»¥äžã調ã¹ãããã«æ瀺ããŸã
/usr/å®éš/ãªããžã㪠ãã£ã¬ã¯ããªã®äžã« /usr/補å/ãªããžã㪠ãã£ã¬ã¯ããªïŒ
ãªããžã㪠qw (
/usr/å®éš/ãªããžããª
/usr/補å/ãªããžããª
);
æå®ããããªããžã㪠ãã£ã¬ã¯ããªã«ã¯ããœãŒã¹ ãã¡ã€ã«ã掟çãã¡ã€ã« (ãªããžã§ã¯ãã
ã©ã€ãã©ãªãšå®è¡å¯èœãã¡ã€ã«)ããŸãã¯ãã®äž¡æ¹ã äžã«ããŒã«ã« ãã¡ã€ã« (ãœãŒã¹ãŸãã¯æŽŸç) ããªãå Žå
Cons ãå®è¡ããããã£ã¬ã¯ããªã次ã«èŠã€ãã£ãåãååã®ãã¡ã€ã«ã®æåã®ã³ããŒ
ãªããžã㪠ãã£ã¬ã¯ããªã®äžã«ãã ã¯ãããŒã«ã«ã®æŽŸçãã¡ã€ã«ãæ§ç¯ããããã«äœ¿çšãããŸãã
Cons ã¯ããªããžã㪠ãã£ã¬ã¯ããªã® XNUMX ã€ã®ã°ããŒãã« ãªã¹ããç¶æããŸãã çæã¯ã
çŸåšã®ãã£ã¬ã¯ããªãããã³ååšããªããã£ã¬ã¯ããªããªã¹ãããåé€ããŸãã
æ€çŽ¢ ã æ§ç¯ãã file in a å庫
çæãæ€çŽ¢ããŸã æ§ç¯ãã & 城éå µ ãªããžã㪠ããªãŒãŸãã¯ããªãŒå ã®ãã¡ã€ã«ã
ãã ããããã¯ãã¯ããªãå ãåµãå ããšããç¶æ³ã«ã€ãªãããŸã: ãªããžã㪠ããªãŒãã©ã®ããã«èŠãã
ã®ããã« æ§ç¯ãã ãã¡ã€ã«ã®å Žå æ§ç¯ãã ãã¡ã€ã«ã¯ããªããžããªãã©ãã«ããããæããŠãããŸãã? ååŸãããã
ããã«ã€ããŠã¯ãã³ãã³ãã©ã€ã³ã§ã-Rããªãã·ã§ã³ã䜿çšããŠãªããžããªãæå®ã§ããŸãã
% cons -R /usr/experiment/repository -R /usr/product/repository ã
ã§æå®ããããã¹ãŠã®ãªããžã㪠ãã£ã¬ã¯ã㪠æ§ç¯ãã or 城éå µ ãã¡ã€ã«ãè¿œå ãããŸã
ã³ãã³ãã©ã€ã³ã® `-R' ãªãã·ã§ã³ã§æå®ããããªããžã㪠ãã£ã¬ã¯ããªã«ã
å庫 source ãã¡ã€ã«
ãœãŒã¹ã³ãŒãïŒ åŸŽéå µ ãã¡ã€ã«) ã®ã©ã€ãã©ãª ããŒãžã§ã³ã® ããã«ã¡ã¯ã
äžçïŒ C ã¢ããªã±ãŒã·ã§ã³ã¯ãªããžããªã«ãã (掟çãã¡ã€ã«ãªã)ãCons ã¯
ãªããžã㪠ãœãŒã¹ ãã¡ã€ã«ã䜿çšããŠãããŒã«ã« ãªããžã§ã¯ã ãã¡ã€ã«ãšå®è¡å¯èœãã¡ã€ã«ãäœæããŸãã
% cons -R /usr/src_only/repository ããã«ã¡ã¯
gcc -c /usr/src_only/repository/hello.c -o hello.o
gcc -c /usr/src_only/repository/world.c -o world.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
ããŒã«ã« ãœãŒã¹ ãã¡ã€ã«ãäœæãããšãCons ã¯é©åãªæŽŸçãã¡ã€ã«ãåæ§ç¯ãããã
ãã¡ã€ã«ïŒ
% ãã³ã¯ãŒã«ã.c
[ç·šé]
% cons -R /usr/src_only/repository ããã«ã¡ã¯
gcc -c ã¯ãŒã«ã.c -o ã¯ãŒã«ã.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
ãŸããããŒã«ã« ãœãŒã¹ ãã¡ã€ã«ãåé€ãããšãCons ã¯æŽŸçãã¡ã€ã«ã®ãã«ãã«æ»ããŸãã
ãªããžã㪠ãœãŒã¹ããã®ãã¡ã€ã«:
% rm world.c
% cons -R /usr/src_only/repository ããã«ã¡ã¯
gcc -c /usr/src_only/repository/world.c -o world.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
å庫 掟ç ãã¡ã€ã«
ãªããžã㪠ããªãŒã«æŽŸçãã¡ã€ã« (éåžžã¯ãªããžã§ã¯ã ãã¡ã€ã«ãã©ã€ãã©ãªããŸãã¯
å®è¡å¯èœãã¡ã€ã«)ãCons ã¯éåžžã®çœ²åèšç®ãå®è¡ããŠã
ãªããžã㪠ãã¡ã€ã«ãææ°ã§ãããã掟çãã¡ã€ã«ãããŒã«ã«ã§ãã«ãããå¿ èŠããããŸãã ãã®æå³ã¯ã
眲åãæ£ããèšç®ãããããã«ããã«ã¯ããªããžã㪠ããªãŒã«
ãå§èš 掟çãã¡ã€ã«ãçæãããšãã« Cons ã«ãã£ãŠäœæããããã¡ã€ã«ã
ããã¯éåžžããªããžããªã§ãœãããŠã§ã¢ããã«ãããããšã«ãã£ãŠéæãããŸã (ãŸãã¯ã
ãŸãã¯ããã«ã ãã£ã¬ã¯ããªã§ãçµæããªããžããªã«ã³ããŒããŸã):
% cd /usr/all/ãªããžããª
% çæããã«ã¡ã¯
gcc -c hello.c -o hello.o
gcc -c ã¯ãŒã«ã.c -o ã¯ãŒã«ã.o
a r libworld.a world.o
ar: libworld.a ãäœæããŠããŸã
ranlib libworld.a
gcc -o ããã«ã¡ã¯ hello.o libworld.a
(ããã¯ã æ§ç¯ãã ãã¡ã€ã«ã¯ /usr/all/ãªããžã㪠ã®ãã£ã¬ã¯ããª
ããªããžããªãã³ãã³ãã¯ãCons ããªããžããªããçŸåšã®ãã£ã¬ã¯ããªãåé€ããããã§ãã
ãªã¹ããïŒ
ç¬èªã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ããŒãäœæãããå Žå ããã«ã¡ã¯C ãã¡ã€ã«ãå¿ èŠãªã®ã¯
XNUMX ã€ã®å¿ èŠãªãœãŒã¹ ãã¡ã€ã«ãäœæãã`-R' ãªãã·ã§ã³ã䜿çšããŠãCons ã«ä»ã®ãœãŒã¹ ãã¡ã€ã«ã䜿çšãããŸãã
ãªããžããªããã®ãã¡ã€ã«:
% mkdir $HOME/build1
% cd $HOME/build1
%ed hello.c
[ç·šé]
% cons -R /usr/all/repository ããã«ã¡ã¯
gcc -c hello.c -o hello.o
gcc -o ããã«ã¡ã¯ hello.o /usr/all/repository/libworld.a
Cons ã¯ããããããŒã«ã«ãåäœæããŠããªãããšã«æ³šæããŠãã ããã libworld.a ã©ã€ãã©ãª (ãŸãã¯
äžç.o ã¢ãžã¥ãŒã«) ã䜿çšããŸããã代ããã«ãªããžããªããæ¢ã«ã³ã³ãã€ã«ãããããŒãžã§ã³ã䜿çšããŸãã
Cons ãå ¥ãã MD5 眲å㯠ãå§èš ãã¡ã€ã«ã«ã¯ã
掟çãã¡ã€ã«ã®å Žåã眲åã®ã¿ã€ã ã¹ã¿ã³ãã¯ãã¡ã€ã«ã®ã¿ã€ã ã¹ã¿ã³ããšäžèŽããå¿ èŠããããŸãã
æå¹ãšã¿ãªãããŸãã
äžéšã®ãœãããŠã§ã¢ ã·ã¹ãã ã¯ããªããžã㪠ãã¡ã€ã«ã®ã¿ã€ã ã¹ã¿ã³ããå€æŽããå ŽåããããŸã (ããããã³ããŒããŠã
äŸ) ãã®å ŽåãCons ã¯ããã©ã«ãã§ããªããžããªã®çœ²åãç¡å¹ã§ãããšæ³å®ããŸãã
äžå¿ èŠã«ãã¡ã€ã«ãåæ§ç¯ããŸãã ãã®åäœã¯ã次ãæå®ããããšã§å€æŽã§ããŸãã
ãªããžããª_Sig_Times_OK 0;
ããã¯ã眲åãæå¹ãã©ãããå€æãããšãã«ã¿ã€ã ã¹ã¿ã³ããç¡èŠããããã« Cons ã«æ瀺ããŸãã ïŒããŒã
ãã®å¥å šæ§ãã§ãã¯ãåé¿ããããšã¯ããªããžããªãé©åã«å¶åŸ¡ããå¿ èŠãããããšãæå³ããŸã
ããªãŒãæŽæ°ããã«æŽŸçãã¡ã€ã«ãå€æŽã§ããªãããã«ããŸãã ãå§èš
ãµã€ã³ãïŒ
ããŒã«ã« ã³ã㌠of ãã¡ã€ã«
ãªããžã㪠ããªãŒã«ãã«ãã®å®å šãªçµæãå«ãŸããŠããå Žåããããããã«ãããããšããŸãã
ããŒã«ã« ããªãŒã«ãã¡ã€ã«ã®ãªããªããžããªãé©åºŠã«é©ãã¹ãããš
èµ·ããïŒ
% mkdir $HOME/build2
% cd $HOME/build2
% cons -R /usr/all/repository ããã«ã¡ã¯
çæïŒãããã«ã¡ã¯ãã¯ææ°ã§ãã
ãªãã³ã³ã¹ã¯ã ããã«ã¡ã¯ ååšããªãå Žåãããã°ã©ã ã¯ææ°ã§ã ããã«ã¡ã¯ ããã°ã©ã ã€ã³
ããŒã«ã«ãã«ããã£ã¬ã¯ããª? ãªããžã㪠(ããŒã«ã« ãã£ã¬ã¯ããªã§ã¯ãªã) ã«ã¯
ææ° ããã«ã¡ã¯ ããã°ã©ã ãããã³ Cons ã¯äœãããå¿ èŠããªãããšãæ£ããå€æããŸãã
ãã®ãã¡ã€ã«ã®ææ°ã®ã³ããŒãåæ§ç¯ããŸãã
ãã ããå€ãã®å ŽåãããŒã«ã« ã³ããŒã®
ãã¡ã€ã«ã¯åžžã«ååšããŸãã ããšãã°ãããã±ãŒãžåãŸãã¯ãã¹ã ã¹ã¯ãªããã¯ãç¹å®ã®
çæããããã¡ã€ã«ã¯ããŒã«ã«ã«ååšããŸãã ãããã®è£å©ã¹ã¯ãªãããèªèããã代ããã«ã
ãªããžã㪠ãã£ã¬ã¯ããªã§ã¯ããLocalãã³ãã³ãã æ§ç¯ãã or 城éå µ ãã¡ã€ã«ãž
ç¹å®ã®ãã¡ã€ã«ãããŒã«ã« ãã«ã ãã£ã¬ã¯ããªã«ååšããå¿ èŠãããããšãæå®ããŸãã
ããŒã«ã« qw(
ããã«ã¡ã¯
);
次ã«ãåãã³ãã³ããåå®è¡ãããšãCons ã¯ããã°ã©ã ã®ããŒã«ã« ã³ããŒãäœæããŸãã
ãªããžããªã®ã³ã㌠(ããããŠããããšãäŒããŸã):
% cons -R /usr/all/repository ããã«ã¡ã¯
/usr/all/repository/hello ããã® hello ã®ããŒã«ã« ã³ããŒ
çæïŒãããã«ã¡ã¯ãã¯ææ°ã§ãã
ããŒã«ã« ã³ããŒãäœæããè¡çºã¯ã
ããã«ã¡ã¯ ãã¡ã€ã«ãCons ã¯ãŸã ææ°ã§ãããšå ±åããŠããŸãã
ããŒã«ã« ã³ããŒã®äœæã¯ã
`Install' ã³ãã³ãã§äžéãã£ã¬ã¯ã㪠(ä»ã®ãã£ã¬ã¯ããªãšå ±æãããã)ã
ãã¡ã€ã«ã® `Install' ã³ãã³ãã«ä»éãã `Local' ã³ãã³ãã䜿çšãããšã
äž¡æ¹ãè¡ã䟿å©ãªæ¹æ³ãšããŠãCons ã `Install_Local' ã³ãã³ããæäŸããŠããããšã¯ããç¥ãããŠããŸãã
Install_Local $env, '#export', 'hello';
ãšãŸã£ããåãã§ãïŒ
ã€ã³ã¹ããŒã« $env '#export', 'hello';
ããŒã«ã« '#ãšã¯ã¹ããŒã/ããã«ã¡ã¯';
ãLocalãã³ãã³ããšãInstall_Localãã³ãã³ãã¯ã©ã¡ããããŒã«ã«ãæŽæ°ããŸã ãå§èš ã®ãã¡ã€ã«
ä»åŸã®ãã«ããæ£ããå®è¡ãããããã«ãé©åãªãã¡ã€ã«çœ²åã
å庫 äŸåé¢ä¿ åæ
çµã¿èŸŒã¿ã®ã¹ãã£ã³ã«ãããCons ã¯æå®ããããªããžã㪠ããªãŒã§å«ãŸããŠãããã®ãæ€çŽ¢ããŸãã
.h ãã¡ã€ã«ã ãã ããã³ã³ãã€ã©ããªããžã㪠ããªãŒã«ã€ããŠãèªèããŠããªãéãã
èŠã€ããããšãã§ããŸãã .h ãªããžããªã«ã®ã¿ååšãããã¡ã€ã«ã ããšãã°ã ããã«ã¡ã¯C
ãã¡ã€ã«ã«ã¯ ããã«ã¡ã¯ã çŸåšã®ãã£ã¬ã¯ããªã®ãã¡ã€ã«:
% cons -R /usr/all/repository ããã«ã¡ã¯
gcc -c /usr/all/repository/hello.c -o hello.o
/usr/all/repository/hello.c:1: hello.h: ãã®ãããªãã¡ã€ã«ããã£ã¬ã¯ããªã¯ãããŸãã
ãã®åé¡ã解決ãããšã建èšç°å¢ã®ããæ¹ã«ããã€ãã®èŠä»¶ã匷å¶ãããŸã
ãã¡ã€ã«ãã€ã³ã¯ã«ãŒãããããã« C ã® `#include' ããªããã»ããµ ãã£ã¬ã¯ãã£ãã䜿çšãããããã«å®çŸ©ãããŠããŸãã
ãªããžã㪠ããªãŒã«ã€ããŠã³ã³ãã€ã©ã«éç¥ããããã«ãCons ã¯é©å㪠`-I' ãè¿œå ããŸãã
ãã©ã°ãã³ã³ãã€ã« ã³ãã³ãã«è¿œå ããŸãã ããã¯ã
ã³ã³ã¹ãã©ã¯ãç°å¢ã§ã¯ãæ€çŽ¢ãããã¹ãŠã®ãµããã£ã¬ã¯ããªãæ瀺çã«æå®ããå¿ èŠããããŸã
çŸåšã®ãã£ã¬ã¯ããªãå«ããå«ãŸãããã¡ã€ã«ã®å Žåã ãã®çµæãäžèšãä¿®æ£ã§ããŸã
ã§ã®ç°å¢äœæã®å€æŽã«ããäŸ æ§ç¯ãã ãã¡ã€ã«ã次ã®ããã«ããŸãã
$env = æ°ããã³ã³ã¹(
CC => 'gcc',
CPPPATH => '.',
LIBS => 'libworld.a',
);
`CPPPATH' å€æ°ã®å®çŸ©ã«ãããããã¯ã
ã³ãã³ãïŒ
% cons -R /usr/all/repository ããã«ã¡ã¯
gcc -c -Iã -I/usr/all/repository /usr/all/repository/hello.c -o hello.o
gcc -o ããã«ã¡ã¯ hello.o /usr/all/repository/libworld.a
`-I' ãã©ã°ã®é åºã¯ãC ããªããã»ããµã®å Žåãåããªããžããªãè€è£œããŸãã
Cons ãç¬èªã®äŸåé¢ä¿åæã«äœ¿çšãããã£ã¬ã¯ããªæ€çŽ¢ãã¹ã ããå Žå
è€æ°ã®ãªããžããªãšè€æ°ã®ãCPPPATHããã£ã¬ã¯ããªãã³ã³ã¹ã¯ãªããžããªãè¿œå ããŸã
ãã£ã¬ã¯ããªãå `CPPPATH' ãã£ã¬ã¯ããªã®å é ã«ç§»åãããã®æ°ãæ¥éã«å¢ãããŸã
`-I' ãã©ã°ã®ã 極端ãªäŸãšããŠã æ§ç¯ãã 以äžãå«ããã¡ã€ã«:
ãªããžã㪠qw(
/ u1
/ u2
);
$env = æ°ããã³ã³ã¹(
CPPPATH => 'a:b:c',
);
次ã®ã³ã³ãã€ã« ã³ãã³ããçæãããŸãã
cc -Ia -I/u1/a -I/u2/a -Ib -I/u1/b -I/u2/b -Ic -I/u1/c -I/u2/c -c hello.c -oããã«ã¡ã¯ã
Cons ã¯ã³ã³ãã€ã©ã® `-I' ãã©ã°ã«äŸåããŠã
ãªããžããªãã£ã¬ã¯ããªã¯æ€çŽ¢ããå¿ èŠããããŸã.Consã®ãªããžããªãã£ã¬ã¯ããªã®æ±ãã¯
C ã® `#include' ãã£ã¬ã¯ãã£ãã§ã®äºéåŒçšç¬Šã®äœ¿çšãšã¯æ ¹æ¬çã«äºææ§ããããŸããã
ãœãŒã¹ã³ãŒãïŒ
#include "file.h" /* ãã®ãããªäºéåŒçšç¬Šã¯äœ¿çšããªãã§ãã ãã */
ããã¯ãã»ãšãã©ã® C ããªããã»ããµãããã®ãããªãã£ã¬ã¯ãã£ãã«çŽé¢ãããšãåžžã«æåã«
ãœãŒã¹ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªãæ€çŽ¢ããŸãã ããã¯ç²Ÿå·§ãª `-I' ã匱äœåãããŸãã
ããªããã»ããµãåªå æ€çŽ¢ã«é©åãããããã« Cons ãæ§ç¯ãããªãã·ã§ã³
ãã¹ã
ãããã£ãŠãCons ã§ãªããžã㪠ããªãŒã䜿çšããå Žåã åžžã« å«ãŸãããã®ã«ã¯è§ãã£ãã䜿çšããŸã
ãã¡ã€ã«ïŒ
ïŒå«ã/* 代ããã«å±±æ¬åŒ§ãäœ¿çš */
ãªããžããª_ãªã¹ã
Cons ã¯ããã¹ãŠã®ãªããžã㪠ãã£ã¬ã¯ããªã®ãªã¹ããè¿ã `Repository_List' ã³ãã³ããæäŸããŸãã
çŸåšã®æ€çŽ¢é åºã§ã ããã¯ããããã°ããããè€é㪠Perl ãå®è¡ããããã«äœ¿çšã§ããŸãã
ãã®ïŒ
@list = ãªããžããª_ãªã¹ã;
print join(' ', @list), "\n";
å庫 çžäºäœçš ã ä»ã® ãã¡ãªãã æ©èœã䜿çš
Cons ã®ãªããžã㪠ããªãŒã®åŠçã¯ãä»ã® Cons æ©èœãšæ£ããçžäºäœçšããŸãã
ã€ãŸããäžè¬çã«æåŸ ã©ããã®åäœãããŸãã
æãé¡èãªã®ã¯ããªããžã㪠ããªãŒãããªã³ã¯ããšæ£ãããããªã匷åã«çžäºäœçšããããšã§ãã
æå³ã ãªããžã㪠ããªãŒã«ã¯ãããŒãžã§ã³ ãã«ãçšã® XNUMX ã€ä»¥äžã®ãµããã£ã¬ã¯ããªãå«ãŸããå ŽåããããŸã
ãœãŒã¹ãµããã£ã¬ã¯ããªãžã®ããªã³ã¯ããä»ããŠç¢ºç«ãããŸãã çæã¯æŽŸçãã¡ã€ã«ãæ€çŽ¢ããŸã
ãªããžã㪠ããªãŒã®äžã®é©åãªãã«ã ãµããã£ã¬ã¯ããªã
ããã©ã«ã ã¿ãŒã²ãã
ãããŸã§ããã«ãããæ瀺çãªã¿ãŒã²ãããæå®ã㊠Cons ãåŒã³åºãæ¹æ³ã瀺ããŠããŸããã
% çæããã«ã¡ã¯
éåžžãCons ã¯ã¿ãŒã²ãããæå®ããªãéãäœããã«ãããŸãããã'.' ãæå®ããŸãã
ïŒçŸåšã®ãã£ã¬ã¯ããªïŒã¯ãã¹ãŠãæ§ç¯ããŸãïŒ
% cons # äœããã«ãããŸãã
ïŒ çæã # æäžäœãã£ã¬ã¯ããªã®äžã«ãã¹ãŠããã«ãããŸã
ãããã©ã«ããã¡ãœãããä»»æã® æ§ç¯ãã or 城éå µ ãã¡ã€ã«ã¯æå®ããã
ã¿ãŒã²ãããããã©ã«ã ã¿ãŒã²ããã®ãªã¹ãã«è¿œå ããŸãã ãªãå Žåãçæã¯ãããã®ããã©ã«ããæ§ç¯ããŸã
ã³ãã³ãã©ã€ã³ã§æå®ãããã¿ãŒã²ããã ãããã£ãŠã次ã®è¡ããããã¬ãã«ã«è¿œå ããŸã
æ§ç¯ãã ãã¡ã€ã«ã¯ãããã©ã«ãã§ãã¹ãŠããã«ããã Make ã®å žåçãªåäœãæš¡å£ããŸãã
ããã©ã«ã 'ã';
以äžã¯ã ããã«ã¡ã¯ & ããããªã ã³ãã³ã (ã³ãã³ããšåããã£ã¬ã¯ããª)
æ§ç¯ãã or 城éå µ ãã¡ã€ã«) ãããã©ã«ãã®ãªã¹ãã«è¿œå ããŸãã
ããã©ã«ã qw(
ããã«ã¡ã¯
ããããªã
);
ãããã©ã«ããã¡ãœããã¯ãã¿ãŒã²ãããããã©ã«ã ãªã¹ãã«è¿œå ããããã«è€æ°å䜿çšã§ããŸãã
éžæç㪠æ§ç¯ããŸã
Cons ã¯ãç¹å®ã®ãã«ãã®ãµã€ãºãçž®å°ããããã® XNUMX ã€ã®æ¹æ³ãæäŸããŸãã XNUMXã€ç®ã¯ãæå®ããããšã§ã
XNUMX ã€ç®ã¯ããã«ã ããªãŒããã«ãŒãã³ã°ããæ¹æ³ã§ãã è¯ã
æåã«ã¿ãŒã²ããä»æ§ãæ€èšããŠãã ããã
éžæç㪠ã¿ãŒã²ãã
make ãšåæ§ã«ãCons ã§ã¯ã³ãã³ãã©ã€ã³ã§ãã¿ãŒã²ããããæå®ã§ããŸãã çæã®ç®æš
ãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã®ããããã§ãã ãã£ã¬ã¯ããªãæå®ãããŠããå Žåãããã¯åãªãçããã®ã§ãã
Consãç¥ã£ãŠãããã¹ãŠã®æŽŸç補åã®ææžãè¡šèšã¯ãæå®ããã圢åŒã§
ãã£ã¬ã¯ããªä»¥äžã äŸãã°ïŒ
% cons build/hello/hello.o
ãã«ããæå³ããŸã ããã«ã¡ã¯ã ãããŠãã®ãã¹ãŠ ããã«ã¡ã¯ã å¿ èŠããããããããŸããã ããã¯åäœãã
ã®ããŒãžã§ã³ ããã«ã¡ã¯ã äžçïŒ ããã°ã©ã ããã«ã¡ã¯ã ã«äŸå
ãšã¯ã¹ããŒã/ã€ã³ã¯ã«ãŒã/world.h. ãã®ãã¡ã€ã«ãææ°ã§ãªãå Žå (誰ããå€æŽãããã)
src/world/world.h)ããé¢ãããã£ã¬ã¯ããªã«ããå Žåã§ããåæ§ç¯ãããŸãã
ãã«ã/ããã«ã¡ã¯.
ãã®äŸã§ã¯:
% ã³ã³ã¹ãã«ã
ã®ãã¹ãŠ ãã«ã å¿ èŠã«å¿ããŠããã£ã¬ã¯ããªãæ§ç¯ãããŸãã ç¹°ãè¿ããŸãããããã«ãããã¡ã€ã«ãå¢ããå¯èœæ§ããããŸã
æ§ç¯ããã ç¹ã«ãäž¡æ¹ ãšã¯ã¹ããŒã/ã€ã³ã¯ã«ãŒã/world.h & ãšã¯ã¹ããŒã/lib/libworld.a ã
ã«ãã£ãŠå¿ èŠãšããã ãã«ã/ããã«ã¡ã¯ ãã£ã¬ã¯ããªã«ãããããããããå€ããªã£ãŠããå Žåã¯ãã«ããããŸãã
ãã®å Žåã代ããã«:
% cons ãšã¯ã¹ããŒã
ãšã¯ã¹ããŒã ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããå¿ èŠããããã¡ã€ã«ã®ã¿ãåæ§ç¯ãããŸãã
ããããã«ã€ã³ã¹ããŒã«ããŸãã `cons build' 㯠`cons
export' ã¯ãã«ããããããã®éãåæ§ã§ãã
ããã ãç¹å¥ã ã¿ãŒã²ãã
Cons ã䜿çšãããšãmake ã¹ã¿ã€ã«ã®ãç¹å¥ãªãã¿ãŒã²ããã¯å¿ èŠãããŸããã çæã®ããæãåçŽãªã¢ããã°
ç¹å¥ã«äœ¿ãããšã§ã export 代ããã«ãã£ã¬ã¯ããªã ããšãã°ãããªããæã£ãŠãããšããŸããã
ã³ãŒãã«é¢é£ä»ããããŠããäžé£ã®åäœãã¹ãå šäœã ãã¹ãã¯
ã³ãŒãã®è¿ãã®ãœãŒã¹ ãã£ã¬ã¯ããªã ãã ããéåžžããããã®ãã¹ããäœæããå¿ èŠã¯ãããŸããã
XNUMX ã€ã®è§£æ±ºçã¯ããã¹ããäœæããããã®ãã¹ãŠã®ãã«ãæé ãæäŸããŠããã
ãã¹ããããªãŒã®å¥ã®éšåã«ã€ã³ã¹ããŒã«ããŸãã ãã¹ãããããã¬ãã«ã«ã€ã³ã¹ããŒã«ãããš
åŒã°ãããã£ã¬ã¯ã㪠ãã¹ãããã®åŸïŒ
% cons ãã¹ã
ãã¹ãŠã®ãã¹ãããã«ãããŸãã
% cons ãšã¯ã¹ããŒã
ã·ã¹ãã ã®æ¬çªããŒãžã§ã³ããã«ãããŸã (ãã ãããã¹ãã¯ãã«ãããŸãã)ã
% ã³ã³ã¹ãã«ã
ããããé¿ããã¹ãã§ã (äžå¿ èŠã«ãã¹ããã³ã³ãã€ã«ãããã)ã
XNUMX ã€ã®ãã¹ãã ããäœæããå Žåã¯ããã¹ãã«æ瀺çã«ååãä»ããããšãã§ããŸã (
ã©ã¡ãã ãã¹ã ãã£ã¬ã¯ããªãŸã㯠ãã«ã ãã£ã¬ã¯ããªïŒã ãã¹ããéçŽããããšãã§ããŸã
tests ãã£ã¬ã¯ããªå ã®äŸ¿å©ãªéå±€ã«ã ãã®éå±€ã¯å¿ èŠãããŸãã
ã€ã³ã¯ã«ãŒãéå±€ãšã»ãŒåãæ¹æ³ã§ãå¿ ããœãŒã¹éå±€ãšäžèŽããŸãã
ãœãŒã¹éå±€ãšäžèŽããªãå¯èœæ§ããããŸã (ã€ã³ã¯ã«ãŒãéå±€ããã以äžã«ãªãå¯èœæ§ã¯äœãã§ã)
C ããã°ã©ã ã®å Žå㯠XNUMX ã¬ãã«ããæ·±ã)ã
ããªãŒå ã®ãã¹ãŠã絶察ã«æ§ç¯ãããå Žå (ã©ã®ãããªãªãã·ã§ã³ãéžæããŠã
éžæ)ã次ã䜿çšã§ããŸãã
ïŒ çæã
ããã¯ããã¹ãŠã®ããªãŒãåé·ã«ãã©ãã®ã§ãç¹ã«å¹ççã§ã¯ãããŸããã
ãœãŒã¹ããªãŒãå«ã¿ãŸãã ãã¡ããããœãŒã¹ ããªãŒã«ã¯ãã«ãå¯èœãªãªããžã§ã¯ããå«ãŸããå ŽåããããŸãã
ãã-éåžžã¯å¥ã®ãã«ãã§ãã«ãããå Žåã§ãããããè¡ãããšã劚ãããã®ã¯äœããããŸãã
ããªãŒã
å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã åªå®
ã¿ãŒã²ããéžæãšåãããŠã ãã«ã åªå® ã®ç¯å²ãçž®å°ããããã«äœ¿çšã§ããŸãã
建ãŠãã åã® peAcH ãš baNaNa ã®äŸã§ã¯ãã¹ã¯ãªããé§ååã®
ãã«ãã®ãã«ãŒãã³ã°ã䜿çšããŠãæœåšçãªãã«ãã®ååã ããç¹å®ã®ç®çã§äœ¿çšã§ããããã«ããããšãã§ããŸãã
ãconsãã®åŒã³åºãã çæ ãŸãã䟿å®äžãã³ãã³ã ã©ã€ã³èŠåãæäŸããŸãã
ãæå®ã§ããŸã 城éå µ ãã¡ã€ã«ã¯å®éã«ããã«ãããããŸããã€ãŸããçµã¿èŸŒãŸããŸãã
ãã«ãããªãŒã«ã äŸãã°ïŒ
% cons ãã«ã + ã¯ãŒã«ã
`+' åŒæ°ã¯ãPerl æ£èŠè¡šçŸãå°å ¥ããŸãã ãã¡ãããããã¯æ¬¡ã®å Žæã§åŒçšããå¿ èŠããããŸãã
åŒå ã«ã·ã§ã«ã®ã¡ã¿æåãããå Žåã¯ãã·ã§ã« ã¬ãã«ã ã®
åŒã¯ããããã«å¯ŸããŠç §åãããŸã 城éå µ ããã«ããã§èšåããããã¡ã€ã«
ååãäžèŽããã¹ã¯ãªããã®ã¿ãå®éã«
ããªãŒãæ§ç¯ããŸãã è€æ°ã®ãã®ãããªåŒæ°ãèš±å¯ããããã®å Žåããããã®ãããããšäžèŽããŸã
ã¹ã¯ãªãããå«ããã«ã¯ååã§ãã
äžèšã®äŸã§ã¯ã ããã«ã¡ã¯ Consã«ã¯äœããªãã®ã§ãããã°ã©ã ã¯ãã«ããããŸãã
ã¹ã¯ãªããã®ç¥è ããã«ã¡ã¯/åŸŽå µãéžæããŸãã libworld.a ãã ããã¢ãŒã«ã€ãã¯æ§ç¯ãããŸã
ããå¿ èŠããããŸãã
ã³ãã³ã ã©ã€ã³ã«ãããã«ãã®ãã«ãŒãã³ã°ã«ã¯ãããã€ãã®çšéããããŸãã ããããæãæçšãª
ããŒã«ã«ãªå€æŽãè¡ãèœåã§ããããã®åŸã
ãããã®å€æŽã®çµæãé«éåããããã«ãã«ã ããªãŒã®ãµã€ãºãå¶éããŸãã
åæ§ç¯æéã ãã«ã ãã«ãŒãã³ã°ã® XNUMX ã€ç®ã®çšéã¯ãåã³ã³ãã€ã«ãç©æ¥µçã«é²æ¢ããããšã§ãã
ããšãã°ãå€æŽãããããã㌠ãã¡ã€ã«ãåå ã§åã³ã³ãã€ã«ãããããšãããã£ãŠããç¹å®ã®ãã¡ã€ã«ã
ããã㌠ãã¡ã€ã«ãžã®å€æŽãéèŠã§ã¯ãªããããŸãã¯
å€æŽã¯ããã¹ãç®çã§ãã»ãšãã©ã®ããªãŒã§å®å šã«ç¡èŠã§ããŸãã
ãšããç解ã®ããšã§ããã®çš®ã®è¡åãèªããããšãå®éçã§ãããšããèŠè§£ã§ãã
次ã®å®å šãªãã«ãã§ã¯ãåæ§ç¯ããå¿ èŠããããã¹ãŠã®ãã®ã«ãªããŸãã åçã®ãã®ã¯ãããŸãã
ãã¡ã€ã«ãæ°žä¹ ã«ææ°ã®ãã®ãšããŠããŒã¯ããããã«ããmake touchãã³ãã³ãã«ã ãããã£ãŠããããããªã¹ã¯ã¯
ãã«ãã®ãã«ãŒãã³ã°ã«ãã£ãŠçºçããè² è·ã軜æžãããŸãã ãªãªãŒã¹å質ã®äœæ¥ã«ã€ããŠã¯ãæããã«ããå§ãããŸã
ãã«ãã®ãã«ãŒãã³ã°ã䜿çšããªãããš (çµ±åäžã«äœ¿çšããŠãåé¡ãããŸãããã
ã³ã³ãã€ã«ã®ãã§ãã¯ãªã©ãã³ãããããåã«ãå¿ ãå¶çŽã®ãªããã«ããå®è¡ããŠãã ããã
çµ±åïŒã
äžæç㪠ãªãŒããŒã©ã€ã
Cons ã¯ããã«ãã®åŽé¢ããªãŒããŒã©ã€ãããããã®éåžžã«åçŽãªã¡ã«ããºã ãæäŸããŸãã æ¬è³ªã¯
XNUMX ã€ãŸãã¯è€æ°ã®ããªãŒããŒã©ã€ããã³ãã³ããå«ããªãŒããŒã©ã€ã ãã¡ã€ã«ãäœæãã
`cons' ãå®è¡ãããšããã³ãã³ãã©ã€ã³ã§ãããæå®ããŸã:
% cons -o over ãšã¯ã¹ããŒã
ãæ§ç¯ããŸã export ãã£ã¬ã¯ããªãååšãããªãŒããŒã©ã€ãã®å¯Ÿè±¡ãšãªããã¹ãŠã®æŽŸçãã¡ã€ã«
ã»ã¯ã·ã§ã³ã« ã ãã¡ã€ã«ã `-o' ãªãã·ã§ã³ãçç¥ãããšãåé€ã«å¿ èŠãªãã¹ãŠã®ãã®ãåé€ãããŸãã
ãã¹ãŠã®ãªãŒããŒã©ã€ããåæ§ç¯ãããŸãã
ãªãŒããŒã©ã€ã ç°å¢ variables
ãªãŒããŒã©ã€ã ãã¡ã€ã«ã«ã¯ãXNUMX çš®é¡ã®ãªãŒããŒã©ã€ããå«ããããšãã§ããŸãã XNUMXã€ç®ã¯åä¿¡ç°å¢
å€æ°ã ãããã¯éåžžã æ§ç¯ãã `%ENV' ããã·ã¥ããã®ãã¡ã€ã«
å€æ°ã ãããã¯ãäžæžããã¡ã€ã«ã§ç°¡åã«äžæžãã§ããŸãã
`%ENV' ã®é©åãªèŠçŽ (ãããã¯ãŠãŒã¶ãŒã®ç°å¢ã§ãªãŒããŒã©ã€ããããå¯èœæ§ããããŸãã
ãã¡ããïŒã
ã ãªãŒããŒã©ã€ã command
XNUMX çªç®ã®ã¿ã€ãã®ãªãŒããŒã©ã€ãã¯ã次ã®ãã㪠`Override' ã³ãã³ãã§å®çŸãããŸãã
ãã®ïŒ
ãªãŒããŒã©ã€ãã => ã => ã...;
æ£èŠè¡šçŸ æ£èŠè¡šçŸ åè£ã§ãããã¹ãŠã®æŽŸçãã¡ã€ã«ã«å¯ŸããŠç §åãããŸã
ãã«ãã®ããã«ã 掟çãã¡ã€ã«ãäžèŽããå Žåãå€æ°/å€ã®ãã¢ã䜿çšãããŸã
掟çãã¡ã€ã«ã«é¢é£ä»ããããã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ã®å€ããªãŒããŒã©ã€ãããŸãã
次ã®ãããªæ§ç¯ç°å¢ããããšããŸãã
$CONS = æ°ããã³ã³ã¹(
COPT => '',
CDBG => '-g',
CFLAGS => '%COPT %CDBG',
);
次ã«ããªãŒããŒã©ã€ããã¡ã€ã«ãããå Žå ã ãã®ã³ãã³ããå«ãïŒ
ãªãŒããŒã©ã€ã '\.o$', COPT => '-O', CDBG => '';
次ã«ã`-o over' ãæå®ãã `cons' åŒã³åºããäœæãããŸãã .o ãã®ç°å¢ãä»ãããã¡ã€ã«ã¯
`-O' ãæå®ã㊠`-g' ãæå®ããã«ã³ã³ãã€ã«ããŸãã ãã¡ããããªãŒããŒã©ã€ãã¯
æ£èŠè¡šçŸãé©åã«éžæããããšã«ãããåäžã®ãã£ã¬ã¯ããªã«å¶éãããŸãã
ãããHello, World!ã®ãªãªãžãã«ããŒãžã§ã³ã§ãã ãã®ç°å¢ã§æ§ç¯ãããããã°ã©ã ã
ãªãŒããŒã©ã€ããé©çšãŸãã¯åé€ããããšãCons ã¯é©åãªéšåãåæ§ç¯ããããšã«æ³šæããŠãã ããã
% çæããã«ã¡ã¯
cc -g -c ãããŒ.c -o ãããŒ.o
cc -o ããã«ã¡ã¯ hello.o
% cons -o over hello
cc -O -c ããã«ã¡ã¯ãc -o ããã«ã¡ã¯ão
cc -o ããã«ã¡ã¯ hello.o
% cons -o over hello
çæïŒãããã«ã¡ã¯ãã¯ææ°ã§ãã
% çæããã«ã¡ã¯
cc -g -c ãããŒ.c -o ãããŒ.o
cc -o ããã«ã¡ã¯ hello.o
ãOverrideãã³ãã³ãã¯äžæçãªãªã³ã¶ãã©ã€ã§ã®ã¿äœ¿çšããããšãéèŠã§ã
ãªãŒããŒã©ã€ãã¯ãã©ãããã©ãŒã ã«äŸåããªããããéçºã«å¿ èŠãªãªãŒããŒã©ã€ã
ã¹ã¯ãªããã®åäœã«é¢ãã詳现ãªç¥èã«é ŒããããŠããããã§ãã çºã«
äžæçãªäœ¿çšã§ããããŸãã«ããªããæããã®ã§ãã
ããšãã°ãå®å šã«æé©åããã
æ¬çªçšã·ã¹ãã ã®ããŒãžã§ã³ -- ãã æ§ç¯ãã & 城éå µ ãã¡ã€ã«ã ãã¡ãã§ã
æé©åãããã·ã¹ãã ããã©ãããã©ãŒã ã«åãããŠèª¿æŽã§ããŸãã ãªããã£ãã€ã¶ãŒã®ãã¬ãŒããªããå¿ èŠãªå Žæ
äœæãããŸã (ããšãã°ãç¹å®ã®ãã¡ã€ã«ã¯å®å šãªæé©åã§ã³ã³ãã€ã«ãããªãå ŽåããããŸã)ã
ãããã¯ãåŸäž (ããã³åçŸæ§) ã®ããã«ã¹ã¯ãªããã«çŽæ¥èšé²ã§ããŸãã
ãã®ä» on å»ºèš ç°å¢
ããã©ã«ã å»ºèš variables
ã®æŠå¿µã«ã€ããŠèšåãã䜿çšããŸããã å»ºèš ç°å¢ãäœåºŠã
åã®ããŒãžã ããã§ããããããå°ãå ·äœçã«ããŸãã 以äžã§
ã¹ããŒãã¡ã³ãïŒ
$env = æ°ããã³ã³ã¹();
æ°ããããã©ã«ã ã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ãžã®åç §ãäœæãããŸãã ããã«ã¯æ°åãå«ãŸããŠããŸã
æ§æå€æ°ãšããã€ãã®ã¡ãœããã®ã çŸæç¹ã§ã¯ãããã©ã«ãã®ãªã¹ãã¯
æ§æå€æ°ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
CC => 'cc',
CFLAGS => '',
CCCOM => '%CC %CFLAGS %_IFLAGS -c %< -o %>',
INCDIRPREFIX => '-I',
CXX => '%CC',
CXXFLAGS => '%CFLAGS',
CXXCOM => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>',
ãªã³ã¯ => '%CXX',
LINKCOM => '%LINK %LDFLAGS -o %> %< %_LDIRS %LIBS',
LINKMODULECOM => '%LD -r -o %> %<',
LIBDIRPREFIX => '-L',
AR => 'ar',
ARFLAGS => 'r',
ARCOM => "%AR %ARFLAGS %> %<\n%RANLIB %>",
RANLIB => 'RANLIB',
AS => 'as',
ASFLAGS => '',
ASCOM => '%AS %ASFLAGS %< -o %>',
LD => 'ld',
LDFLAGS => '',
PREFLIB => 'ã©ã€ãã©ãª',
SUFLIB => '.a',
SUFLIBS => '.so:.a',
SUFOBJ => '.o',
ENV => { 'ãã¹' => '/ binã«:/ usr / bin' }ã
Win32 ã·ã¹ãã (Windows NT) ã§ã¯ã次ã®æ§ç¯å€æ°ã¯
ããã©ã«ãïŒ
CC => 'cl',
CFLAGS => '/nologo',
CCCOM => '%CC %CFLAGS %_IFLAGS /c %< /Fo%>',
CXXCOM => '%CXX %CXXFLAGS %_IFLAGS /c %< /Fo%>',
INCDIRPREFIX => '/I',
ãªã³ã¯ => 'ãªã³ã¯',
LINKCOM => '%LINK %LDFLAGS /out:%> %< %_LDIRS %LIBS',
LINKMODULECOM => '%LD /r /o %> %<',
LIBDIRPREFIX => '/LIBPATH:',
AR => 'lib',
ARFLAGS => '/nologo',
ARCOM => "%AR %ARFLAGS /out:%> %<",
RANLIB => '',
LD => 'ãªã³ã¯',
LDFLAGS => '/nologo',
PREFLIB => '',
SUFEXE => '.exe',
SUFLIB => '.lib',
SUFLIBS => '.dll:.lib',
SUFOBJ => '.obj',
ãããã®å€æ°ã¯ãç°å¢ã«é¢é£ä»ããããããŸããŸãªã¡ãœããã«ãã£ãŠäœ¿çšãããŸãã
ç¹ã«ãæçµçã«å€éšã³ãã³ããåŒã³åºãã¡ãœããã¯ããããã眮ãæããŸã
å¿ èŠã«å¿ããŠãæçµçãªã³ãã³ãã«å€æ°ãè¿œå ããŸãã ããšãã°ãããªããžã§ã¯ããã¡ãœããã¯
å€æ°ã®ãœãŒã¹ ãã¡ã€ã«ãšãå¿ èŠã«å¿ããŠã察å¿ãããªããžã§ã¯ãã®æŽŸçãæé ããŸãã
ãã¡ã€ã«ã äŸãã°ïŒ
ãªããžã§ã¯ã $env 'foo.c', 'bar.c';
ããã«ãããå¿ èŠã«å¿ããŠã ãµãŒã & ããŒãªãŒ. åŒã³åºãããã³ãã³ãã¯åçŽã§ã
å¿ èŠãªé©åãªå€éšã³ãã³ãã«çœ®æã«ãã£ãŠå±éããã `%CCCOM'
åãªããžã§ã¯ããæ§ç¯ããŸãã ãã³ãã³ããã®äžã§çœ®æèŠåãããã«èª¿ã¹ãŸãã
ã¡ãœããã以äžã
æ§ç¯å€æ°ã¯ä»ã®ç®çã«ã䜿çšãããŸãã ããšãã°ã`CPPPATH' ã¯
ã€ã³ã¯ã«ãŒã ãã£ã¬ã¯ããªã®ãã¹ãã³ãã³ã§åºåã£ãŠæå®ããããã«äœ¿çšãããŸãã ãããã¯æå³ãããŠããŸã
C ããªããã»ããµã«æž¡ãããC ãã¡ã€ã« ã¹ãã£ã³æ©æ§ã«ãã£ãŠã䜿çšãããŸãã
C ã³ã³ãã€ã«ã«å«ãŸããäŸåé¢ä¿ã決å®ããŸãã ã§å§ãŸãå€æ°
ã¢ã³ããŒã¹ã³ã¢ã¯ããŸããŸãªæ¹æ³ã§äœæãããéåžžã¯ãå éšããšèŠãªãããŸãã
å€æ°ã ããšãã°ããªããžã§ã¯ãã®äœæãåŒã³åºãã¡ãœãããåŒã³åºããããšã
C ãœãŒã¹ãããå€æ° `_IFLAGS' ãäœæãããŸãããã㯠`-I' ã¹ã€ããã«å¯Ÿå¿ããŸãã
`CPPPATH' ã§æå®ããããã£ã¬ã¯ããªãè¡šãããã« C ã³ã³ãã€ã©ã§å¿ èŠãšãããŸãã
ç¹å®ã®ç°å¢ã®å Žåãå€æ°ã®å€ã¯äžåºŠèšå®ããããã®åŸã§èšå®ãããããšã«æ³šæããŠãã ããã
ãªã»ããããªã (å€æ°ãå€æŽããã«ã¯ãæ°ããç°å¢ãäœæããå¿ èŠããããŸããã¡ãœãããæäŸãããŠããŸã
ãã®ç®çã®ããã«æ¢åã®ç°å¢ãã³ããŒããå Žå)ã 次ã®ãããªããã€ãã®å éšå€æ°
`_IFLAGS' ã¯ãªã³ããã³ãã§äœæãããŸãããäžåºŠèšå®ããããšã
ç°å¢ã
`CFLAGS'ã`LDFLAGS'ãããã³ `ARFLAGS' å€æ°ã¯ãã¹ãŠããªãã·ã§ã³ãæž¡ãå ŽæãæäŸããŸãã
ãããããã³ã³ãã€ã©ãŒãããŒããŒãããã³ã¢ãŒã«ã€ããŒã ããã»ã©æçœã§ã¯ãããŸãããã`INCDIRPREFIX'
å€æ°ã¯ãåã€ã³ã¯ã«ãŒãã®å é ã«è¿œå ãããªãã·ã§ã³æååãæå®ããŸã
ã³ã³ãã€ã©ãã©ããèŠã€ããããç¥ãããã®ãã£ã¬ã¯ã㪠.h ãã¡ã€ã«ã åæ§ã«ã
`LIBDIRPREFIX' å€æ°ã¯ãå é ã«è¿œå ãããªãã·ã§ã³æååãæå®ããŸã
ãªã³ã«ãŒãã©ã€ãã©ãªãæ€çŽ¢ããå¿ èŠãããåãã£ã¬ã¯ããªã
å¥ã®å€æ°ãENVãã¯ãå®è¡äžã®ã·ã¹ãã ç°å¢ã決å®ããããã«äœ¿çšãããŸãã
å€éšã³ãã³ãã®ã ããã©ã«ãã§ã¯ãèšå®ãããŠããå¯äžã®ç°å¢å€æ°ã¯ãPATHãã§ãã
UNIX ã³ãã³ãã®å®è¡ãã¹ã§ãã æ倧éã®åçŸæ§ãåŸãã«ã¯ã
ãããã¬ãã«ã§ãå®éã«ç¬èªã®å®è¡ãã¹ãèšå®ããããã«æé ããŸã æ§ç¯ãã ãã¡ã€ã« (ãŸãã¯
ãããããPerl ã®ãuseãã³ãã³ãã§é©åãªæ§ç¯ããã±ãŒãžãã€ã³ããŒãããããšã«ãã£ãŠ)ã ã®
ããã©ã«ãå€æ°ã¯ãããã«äœ¿çšã§ããããã«ããããšãç®çãšããŠããŸãã
è£é å»ºèš variables
ã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢å€æ°ã¯ããœãŒã¹ ãã¡ã€ã«åãšã¿ãŒã²ãã ãã¡ã€ã«åã§è£éãããå ŽåããããŸã
æ§ç¯å€æ°åã®åã« `%' ãä»ããŸãã
$env = æ°ããã³ã³ã¹(
DESTDIR => 'ããã°ã©ã ',
SRCDIR => 'src',
);
ããã°ã©ã $env '%DESTDIR/hello', '%SRCDIR/hello.c';
æ§æå€æ°ã®å±éã¯ååž°çã§ããã€ãŸãããã¡ã€ã« å(s) ã¯å
眮æãã§ããªããªããŸã§æ¡åŒµãããŸãã æ§æå€æ°ãããã§ãªãå Žå
ç°å¢ã§å®çŸ©ãããŠããå Žåããã«æååã眮ãæããããŸãã
ããã©ã«ã å»ºèš ã¡ãœãã
ããã©ã«ãã®æ§ç¯æ¹æ³ã®ãªã¹ãã«ã¯ã次ã®ãã®ãå«ãŸããŸãã
ã ãæ°ããã ã³ã³ã¹ãã©ã¯ã¿
`new' ã¡ãœãã㯠Perl ãªããžã§ã¯ã ã³ã³ã¹ãã©ã¯ã¿ã§ãã ã€ãŸããåç §ãä»ããŠåŒã³åºãããŸãã
æ¢åã®å»ºèšç°å¢ã« åç §ãããããããªãéçã«ãååã䜿çšããŠ
ããŒã«ã® ããã±ãŒãž ã³ã³ã¹ãã©ã¯ã¿ãŒãå®çŸ©ãããŠããå Žæã ã¡ãœããã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
$env = æ°ããã³ã³ã¹( );
æ»ã£ãŠããç°å¢ã¯ãããã±ãŒãž `cons' ã«ãã¬ã¹ãããŠããŸãã
以äžã§èª¬æããããã©ã«ãã®ã¡ãœãããé¢é£ä»ããããŠããŸãã åå¥æœå·¥
ãªãŒããŒã©ã€ã ãªã¹ãã«ååãšå€ã®ãã¢ãæå®ããããšã§ãå€æ°ããªãŒããŒã©ã€ãã§ããŸãã ãäºæ¿ãã ãã
ã³ãã³ãç°å¢å€æ° (ã€ãŸãããENVãã®äžã«ãããã®) ããªãŒããŒã©ã€ãããã«ã¯ã次ã®ããã«ããå¿ èŠããããŸãã
ããããã¹ãŠããªãŒããŒã©ã€ãããŸãã ãã®åé¡ãåé¿ããã«ã¯ããcopyãã¡ãœããã
æ¢åã®å»ºèšç°å¢ã
ã ãã¯ããŒã³ã æ¹æ³
`clone' ã¡ãœããã¯ãæ¢åã®ã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ã®ã¯ããŒã³ãäœæããŸãã
次ã®äŸã®ããã«åŒã³åºãããŸãã
$env2 = $env1->clone( );
éåžžã®æ¹æ³ã§ãªãŒããŒã©ã€ããæäŸããŠãå¥ã®ç°å¢ãäœæã§ããŸãã
ãªãªãžãã«ã åãç°å¢ã«æ°ããååãå¿ èŠãªå Žå (ããã¯ã
ç°å¢ãæ¢åã®ã³ã³ããŒãã³ãã«ãšã¯ã¹ããŒãããå Žå)ãåçŽãªå²ãåœãŠã䜿çšããã ãã§ãã
ã ãã³ããŒã æ¹æ³
ãcopyãã¡ãœããã¯ãå€éšã§å®çŸ©ãããæ§æå€æ°ã
ããããååãšå€ã®ãã¢ã®ãªã¹ããšããŠè¿ããŸãã ãªãŒããŒã©ã€ããå¯èœ
ãã®å Žåãå¿ èŠã«å¿ããŠãªãŒããŒã©ã€ããããå€ãè¿ãããŸãã ã®
以äžã®ãããã¿ã€ãã«ç€ºãããã«ãè¿ããããªã¹ããããã·ã¥ã«å²ãåœãŠãããšãã§ããŸããã
ä»ã®æ¹æ³ã§æäœãã:
%env = $env1->copy( );
ããèªäœãããã·ã¥ã§ãããENVãã®å€ãæ°ããããã·ã¥ã«ã³ããŒããããããããã¯
å ã®ç°å¢ã«åœ±é¿ãäžããããšãæããã«å€æŽããŸãã ããšãã°ãããªããæ¬åœã«
ããã©ã«ãç°å¢ã§ `PATH' å€æ°ã ãããªãŒããŒã©ã€ããããå Žåã¯ã次ã®ããã«ããŸãã
次ã®ãšããã§ãã
%cons = new cons()->copy();
$cons{ENV}{PATH} = " ";
$cons = æ°ãã cons(%cons);
ããã«ãããããã©ã«ãã®å®è¡ç°å¢ã«ããå¯èœæ§ã®ããä»ã®ãã®ã¯ãã¹ãŠæ®ãããŸã
å¹³éãªã
ã ãã€ã³ã¹ããŒã«ã æ¹æ³
`Install' ã¡ãœããã¯ãæå®ããããã¡ã€ã«ãæå®ãããå Žæã«ã€ã³ã¹ããŒã«ãããããã«æé ããŸãã
ãã£ã¬ã¯ããªã ã€ã³ã¹ããŒã«ã¯æé©åãããŠããŸãããªã³ã¯ã§ããå Žåããã¡ã€ã«ã¯ã³ããŒãããŸããã ããã
ããã¯æãŸããåäœã§ã¯ãããŸãããå¥ã®æ¹æ³ã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ãã¡ã€ã«ã 次ã®ããã«åŒã°ããŸãã
$env ãã€ã³ã¹ããŒã«ã ;
ã€ã³ã¹ããŒã«ããããã¡ã€ã«ã®ååã¯ä»»æã§ãããæåŸã®
åååã®ã³ã³ããŒãã³ãã¯ãã€ã³ã¹ããŒã«ãããã¿ãŒã²ããåã«äœ¿çšãããŸãã ããšãã°ã
ã€ã³ã¹ããŒã«ããããã«æé ãã foo / bar in ããºããã㯠ã㌠å ã®ãã¡ã€ã« ã㺠ãã£ã¬ã¯ããªïŒã§ã¯ãªã
foo / bar).
ã ãInstallAsã æ¹æ³
`InstallAs' ã¡ãœããã¯ãæå®ããããœãŒã¹ãæé ããŸã file(s) ãšããŠã€ã³ã¹ããŒã«ãã
æå®ãããã¿ãŒã²ãã fileïŒç§ïŒã è€æ°ã®ãã¡ã€ã«ããã¡ã€ã« ãªã¹ããšããŠæå®ããå¿ èŠããããŸãã ã®
ã€ã³ã¹ããŒã«ãæé©åãããŸãããªã³ã¯ã§ããå Žåããã¡ã€ã«ã¯ã³ããŒãããŸããã ããã
å¿ èŠãªåäœãè¡ãã«ã¯ãå¥ã®æ¹æ³ã䜿çšããŠãã¡ã€ã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ããã¯
次ã®ããã«åŒã°ããŸãïŒ
`InstallAs' 㯠XNUMX ã€ã®æ¹æ³ã§åäœããŸã:
åäžãã¡ã€ã«ã®ã€ã³ã¹ããŒã«:
$env TgtFileãSrcFile ãšããŠã€ã³ã¹ããŒã«ããŸãã
è€æ°ãã¡ã€ã«ã®ã€ã³ã¹ããŒã«:
InstallAs $env ['tgt1', 'tgt2'], ['src1', 'src2'];
ãŸãã¯ã次ã®ããã«ã:
@srcs = qw(src1 src2 src3);
@tgts = qw(tgt1 tgt2 tgt3);
InstallAs $env [@tgts], [@srcs];
ã¿ãŒã²ãã ãªã¹ããšãœãŒã¹ ãªã¹ãã®äž¡æ¹ãåãé·ãã§ããå¿ èŠããããŸãã
ã ã貎éãªã æ¹æ³
`Precious' ã¡ãœããã¯ãæå®ããããã¡ã€ã«ãŸãã¯ãã¡ã€ã«ã®ãªã¹ãã以åã«åé€ããªãããã« cons ã«èŠæ±ããŸãã
ããããåã³æ§ç¯ããŸãã 次ã®ããã«åŒã³åºãããŸãã
貎é;
ããã¯ãã©ã€ãã©ãªã®å¢åæŽæ°ããããã°ãèš±å¯ããå Žåã«ç¹ã«äŸ¿å©ã§ã
æ¯åæ°ããåæ§ç¯ãããã®ã§ã¯ãªããæŽæ°ãããæ å ±ãã¡ã€ã«ã çæã¯ãŸã
`-r' ãã©ã°ãæå®ãããŠããå Žåããã¡ã€ã«ãåé€ããŸãã
ã ãã³ãã³ãã æ¹æ³
ãã³ãã³ããã¡ãœããã¯ãããããå€éšã³ãã³ããæé ããããã«äœ¿çšã§ãããã£ãããªãŒã« ã¡ãœããã§ãã
ã¿ãŒã²ãããæŽæ°ããããã«åŒã³åºãããã³ãã³ãã ãã®ã³ãã³ãã§ã¯ãã¿ãŒã²ãã ãã¡ã€ã«ãš
å ¥åãæäŸãããŸãã ããã«ãæ§ç¯ã³ãã³ã ã©ã€ã³ãŸãã¯è€æ°ã®ã©ã€ã³ãã
æåå (ãã®æååã«ã¯ãnew ã§åºåãããè€æ°ã®ã³ãã³ããåã蟌ãŸããŠããå ŽåããããŸã
è¡ïŒã ãã³ãã³ããã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
ã³ãã³ã $env ã ã ;
ã¿ãŒã²ããã¯ãæå®ãããå ¥åãã¡ã€ã«ã®ãªã¹ãã«äŸåããããã«ãªããå ¥åã¯
ããããªããšãCons ã¯ã¿ãŒã²ããã®ãã«ããè©Šè¡ããŸããã
æ§ç¯ã³ãã³ãå ã§ã¯ãæ§ç¯ç°å¢ããã®ä»»æã®å€æ°ã
æ§æå€æ°ã®ååã®åã« `%' ãä»ããããšã§å°å ¥ãããŸãã ããã¯ååž°çã§ã:
ã³ãã³ãã¯ã眮æãã§ããªããªããŸã§å±éãããŸãã 建èšã§ããã°
variable ãç°å¢ã§å®çŸ©ãããŠããªãå Žåã¯ãnull æååã眮ãæããããŸãã ã
äºéåããã `%%' ã¯ãæ§ç¯ã³ãã³ãã§åäžã® `%' ã«çœ®ãæããããŸãã
å±éãããç䌌å€æ°ãããã€ããããŸãã
%> ã¿ãŒã²ãã ãã¡ã€ã«å (ãã«ãã¿ãŒã²ãã ã³ãã³ãã§ã¯ãããã¯åžžã«æåã®ã¿ãŒã²ããã§ã)
èšåãããïŒã
%0 `%>' ãšåãã
%1ã%2ã...ã%9
ãããã¯ããããã XNUMX çªç®ãã XNUMX çªç®ã®å ¥åãã¡ã€ã«ãåç §ããŸãã
%< å ¥åã®å®å šãªã»ããã ãããã®ãããããä»ã®å Žæã§äœ¿çšãããŠããå Žå
çŸåšã®ã³ãã³ã ã©ã€ã³ (`%1'ã`%2' ãªã©ãä»ããŠ)ããããã¯
`%<' ã«ãã£ãŠæäŸããããªã¹ãã ã§èŠã€ãã£ã次ã®ã³ãã³ããæ€èšããŠãã ãã 城éå µ file
ã»ã¯ã·ã§ã³ã« test ãã£ã¬ã¯ããªïŒ
ã³ãã³ã $env 'tgt', qw(foo bar baz), qq(
ãšã³ãŒ %< -i %1 > %>
ãšã³ãŒ %< -i %2 >> %>
ãšã³ãŒ %< -i %3 >> %>
);
If tgt æŽæ°ããå¿ èŠãããå Žåãããã«ããã
次ã®ã³ãã³ãã¯ãåãããã³ã°ã確ç«ãããŠããªããšæ³å®ããŠããŸãã test
ãã£ã¬ã¯ããªïŒ
ãšã³ãŒ ãã¹ã/ã㌠ãã¹ã/baz -i ãã¹ã/foo > ãã¹ã/tgt
echo test/foo test/baz -i test/bar >> test/tgt
echo test/foo test/bar -i test/baz >> test/tgt
äžèšã®ç䌌å€æ°ã®ããããã®çŽåŸã«ã次ã®ãããããç¶ãå ŽåããããŸãã
å±éããããã¹åã®äžéšãéžæãããµãã£ãã¯ã¹:
:a ãã¡ã€ã«åãžã®çµ¶å¯Ÿãã¹
:b ãã£ã¬ã¯ããªã«æ¥å°ŸèŸãåãé€ãããã¡ã€ã«åãå ãããã®
:d ãã£ã¬ã¯ããª
:f ãã¡ã€ã«å
:s ãã¡ã€ã«åã®ãµãã£ãã¯ã¹
:F æ¥å°ŸèŸãåãé€ãããã¡ã€ã«å
äžèšã®äŸãç¶ãããšã`%<:f' 㯠`foo bar baz' ã«å±éããã`%':d> ã¯
ããã¹ããã«å±éããŸãã
ã³ãã³ãã®äžéšãå²ãããšã«ãããããã°ã©ã ã§ã³ãã³ãã®äžéšãæžãæããããšãã§ããŸã
`%[' ãš `%]' ã®éã ããã¯ãæåã®åèªãšããŠååãä»ããããæ§ç¯å€æ°ãåŒã³åºããŸã
Perl ã³ãŒãåç §ãšããŠæ¬åŒ§ã§å²ãŸããŠããŸãã ãã®åŒã³åºãã®çµæã䜿çšãããŸã
ã³ãã³ãã©ã€ã³ã®æ¬åŒ§ã®å 容ã眮ãæããŸãã ããšãã°ã
ãšããååã®æ¢åã®å ¥åãã¡ã€ã« tgt.in:
@keywords = qw(foo bar baz);
$env = new cons(X_COMMA => sub { join(",", @_) });
ã³ãã³ã $env 'tgt', 'tgt.in', qq(
echo '# ããŒã¯ãŒã: %[X_COMMA @keywords %]' > %>
ç« %< >> %>
);
ããã¯å®è¡ãããŸãïŒ
echo '# ããŒã¯ãŒã: fooãbarãbaz' > tgt
ç« tgt.in >> tgt
眮æãè¡ãããåŸã空çœæååã¯åäžã®ç©ºçœã«å€æããã
å é ãšæ«å°Ÿã®ç©ºçœã¯åé€ãããŸãã ãã£ãŠçŽ¹ä»äžå¯
ã³ãã³ãã«æž¡ãããæååå ã®å¯å€é·ã®ç©ºçœã
äžçš®ã®ã·ã§ã«åŒçšã
è€æ°è¡ã®ã³ãã³ãæååãæå®ãããŠããå Žåãã³ãã³ãã¯é çªã«å®è¡ãããŸãã ããããã°
ã³ãã³ãã®ãã¡ã® XNUMX ã€ã倱æãããšãæ®ãã®ã³ãã³ãã¯å®è¡ããããã¿ãŒã²ããã¯æ¬¡ã®ããã«ããŒã¯ãããŸããã
ã€ãŸããã¿ãŒã²ããã®æ°ãã眲åã¯ä¿åãããŸããã
éåžžããã¹ãŠã®ã³ãã³ããæåãããŒãã®ã¹ããŒã¿ã¹ãè¿ãããå Žå (ãŸãã¯ãã©ãããã©ãŒã ãäœã§ããã
æåã®ç¹å®ã®æ瀺ãå¿ èŠ)ãæ°ãã眲åãä¿åãããŸãã
ç®æšã ã³ãã³ãã倱æããåŸã§ã誀ã£ãŠæåãå ±åããå ŽåãCons ã¯æ¬¡ã®ããšãè¡ããŸãã
ãã®ã³ãã³ãã«ãã£ãŠäœæãããã¿ãŒã²ãã ãã¡ã€ã«ãæ£ç¢ºã§ææ°ã®ãã®ã§ãããšæ³å®ããŸãã
å±éåŸã®åã³ãã³ãæååã®æåã®åèªã¯ãå®è¡å¯èœãã¡ã€ã«ã§ãããšèŠãªãããŸã
ã³ãã³ãã¯ã'PATH' ç°å¢å€æ° (ããã¯ã
ãENVãæ§æå€æ°)ã ãã®ã³ãã³ãããã¹äžã«ããå Žåãã¿ãŒã²ããã¯
ãããã£ãŠãã³ãã³ãã¯å¿ èŠã«å¿ããŠèªåçã«æ§ç¯ãããŸãã ããã¯
äžéšã®ã·ã§ã«ã§ã¯ãã»ãã³ãã³ã§åºåããããã«ãããŒã ã³ãã³ããèšè¿°ã§ããŸãã ã®ã¿
ãã ããæåã®ã³ãã³ãã¯ãŒãã¯äŸåãããããã³ãã³ãæååãèšè¿°ããå Žå
ãã®æ¹æ³ã§ã¯ã(`Depends' ã¡ãœããã䜿çšããŠ) äŸåé¢ä¿ãæ瀺çã«èšå®ãããããŸãã¯
䜿çšããŠããã³ãã³ããã·ã¹ãã ã³ãã³ãã§ããããšã確èªããŠãã ããã
å©çšå¯èœã å©çšã§ããªãå Žåã¯ãåœç¶ããšã©ãŒãçºçããŸãã
ããããã®ã³ãã³ã (è€æ°è¡ã®ã³ãã³ãå ã® XNUMX ã€ã§ã) ã `[perl]' ã§å§ãŸãå Žåãæ®ãã¯
ãã®ã³ãã³ã ã©ã€ã³ã®
ã·ã§ã«ã Perl ã®è§£æäžã«ãšã©ãŒãçºçããå ŽåããŸã㯠Perl åŒã 0 ãŸãã¯
undef ã®å Žåãã³ãã³ãã¯å€±æãããšèŠãªãããŸãã ããšãã°ãããã¯ç°¡åã§ã
Perl ããçŽæ¥ãã¡ã€ã« `foo' ãäœæããã³ãã³ã:
$env = æ°ããã³ã³ã¹();
ã³ãã³ã $env 'foo',
qq([perl] open(FOO,'>foo');print FOO "hi\\n"; close(FOO); 1);
ã³ãã³ããå®è¡ããããšããããªãã¯åãããã±ãŒãžã«ããããšã«æ³šæããŠãã ãã æ§ç¯ãã
or 城éå µ ãã¡ã€ã«ãèªã¿èŸŒãŸããã®ã§ãåããã¡ã€ã«å ã§å®çŸ©ãã Perl é¢æ°ãåŒã³åºãããšãã§ããŸã
æ§ç¯ãã or 城éå µ ãã³ãã³ããã衚瀺ããããã¡ã€ã«:
$env = æ°ããã³ã³ã¹();
ãµã create_file {
ç§ã® $file = ã·ãã;
open(ãã¡ã€ã«ã">$ãã¡ã€ã«");
print FILE "hi\n";
closeïŒFILEïŒ;
1ãªã¿ãŒã³;
}
ã³ãã³ã $env 'foo', "[perl] &create_file('%>')";
Perl æååã¯ã掟çãã¡ã€ã«ã®çœ²åãçæããããã«äœ¿çšãããŸãã
æååãå€æŽãããšããã¡ã€ã«ãåæ§ç¯ãããŸãã åŒã³åºããµãã«ãŒãã³ã®å 容ã
ãã ãã眲åã®äžéšã§ã¯ãªãããã次ã®ãããªåŒã³åºããããµãã«ãŒãã³ãå€æŽãããš
äžèšã® `create_file' ã§ã¯ãã¿ãŒã²ãã㯠åæ§ç¯ãããŸãã ãŠãŒã¶ãŒã«èŠåããŸãã
Cons ã¯éåžžãã³ãã³ããå®è¡ããåã«åºåããŸãã ãã®åäœã¯ã
ã³ãã³ãã®æåã®æå㯠`@' ã§ãã `@' ã
ã³ãã³ãåãŸãã¯ããããšã¹ã±ãŒãããŠã`@cmd' ã Perl ã®åŒçšã«é åã®ããã«èŠããªãããã«ããŸã
è£éãå®è¡ããæŒç®å:
# æåã®ã³ãã³ã ã©ã€ã³ãæ£ãããããŸããã
# "@cp" ã¯é åã®ããã«èŠãããã
# Perl qq// é¢æ°ã«ã
# 代ããã« XNUMX çªç®ã®åœ¢åŒã䜿çšããŸãã
ã³ãã³ã $env 'foo', 'foo.in', qq(
@cp %< äžæãã¡ã€ã«
@ cp äžæãã¡ã€ã« %>
);
å±éãããã³ãã³ã ã©ã€ã³ã®ã©ããã« `<' ãªã©ã®ã·ã§ã« ã¡ã¿æåãããå Žåã
`>'ãåŒçšç¬ŠããŸãã¯ã»ãã³ãã³ã䜿çšãããšãã³ãã³ãã¯å®éã«å®è¡ãããŸãã
ã·ã§ã«ã ããã¯ã次ã®ãããªã³ãã³ããæå³ããŸãã
CD ããŒ
ãã¹äžã«ã³ãã³ã `cd' ããªããããåç¬ã§ã¯é垞倱æããŸãã ããããã³ãã³ã
æååïŒ
CD $<:d; tar cf $>:f $<:f
å±éãããšãã·ã§ã«ã®ã¡ã¿æåã»ãã³ãã³ãåŒãç¶ãå«ãŸããã·ã§ã«ã¯
ã³ãã³ãã解éããããã«åŒã³åºãããŸãã `cd' ã¯ãã®ãµãã·ã§ã«ã«ãã£ãŠè§£éããããããã³ãã³ã
æåŸ ã©ããã«å®è¡ãããŸãã
è€æ°ã®ã¿ãŒã²ãããæã€ã³ãã³ããæå®ããã«ã¯ã次ã®ãªã¹ããžã®åç §ãæå®ã§ããŸãã
ã¿ãŒã²ããã Perl ã§ã¯ããªã¹ããè§æ¬åŒ§ã§å²ãããšã«ãã£ãŠãªã¹ãåç §ãäœæã§ããŸãã
ãããã£ãŠã次ã®ã³ãã³ãïŒ
ã³ãã³ã $env ['foo.h', 'foo.c'], 'foo.template', q(
äžä»£ %1
);
ã³ãã³ã `gen' ã XNUMX ã€ã®ãã¡ã€ã«ãäœæããå Žåã«äœ¿çšã§ããŸãã ãµãŒã & foo.c.
ã ããªããžã§ã¯ãã æ¹æ³
`Objects' ã¡ãœããã¯ãæå®ããããªããžã§ã¯ãã«å¯Ÿå¿ãããªããžã§ã¯ã ãã¡ã€ã«ãäœæããããã«æé ããŸãã
ãœãŒã¹ãã¡ã€ã«ã 以äžã«ç€ºãããã«åŒã³åºãããŸãã
@files = ãªããžã§ã¯ã $env ;
Unix ã§ã¯ããœãŒã¹ãã¡ã€ã«ã®æ«å°Ÿã¯ .s & .c çŸåšãµããŒããããŠãããã³ã³ãã€ã«ãããäºå®ã§ã
ã§çµããåããã¡ã€ã«ã®ååã« .o. ããã©ã«ãã§ã¯ããã¹ãŠã®ãã¡ã€ã«ã¯åŒã³åºãã«ãã£ãŠäœæãããŸã
`CCCOM' æ§æå€æ°ãå±éããçµæã®å€éšã³ãã³ãã
`%<' ãš `%>' ã¯ããããããœãŒã¹ ãã¡ã€ã«ãšãªããžã§ã¯ã ãã¡ã€ã«ã«èšå®ãããŸã (`Command' ã¡ãœãããåç §ããŠãã ãã)ã
æ¡åŒµã®è©³çŽ°ã«ã€ããŠ)ã å€æ° `CPPPATH' ã¯ããœãŒã¹ ãã¡ã€ã«ãã¹ãã£ã³ãããšãã«ã䜿çšãããŸã
äŸåé¢ä¿ã®ããã«ã ããã¯ã³ãã³ã§åºåããããã¹åã®ãªã¹ãã§ãããäœæã«ã䜿çšãããŸã
-`I' ã®é©åãªãªã¹ããå«ãæ§ç¯å€æ° `_IFLAGS'
ã³ã³ãã€ã«ã®ãªãã·ã§ã³ã `CPPPATH' å ã®çžå¯Ÿãã¹åã¯ãã¹ãŠçžå¯Ÿãã¹ãšããŠè§£éãããŸã
é¢é£ä»ããããã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ãäœæããããã£ã¬ã¯ã㪠(絶察
ããã³æäžäœã®çžå¯Ÿåã䜿çšã§ããŸã)ã ãã®å€æ°ã¯ãCCCOMãã«ãã£ãŠäœ¿çšãããŸãã æ¯ãèã
ãã®ã³ãã³ãã®å€ã¯ãè£éãããå€æ°ãå€æŽããããšã§å€æŽã§ããŸã
`CC' ã `CFLAGS' ãªã©ã® `CCCOM' ã«ãéæ¥çã«ã¯ `CPPPATH' ã«ã ããããšãå¯èœã§ã
`CCCOM' èªäœã®å€ã眮ãæããŸãã 䟿å®äžããã®ãã¡ã€ã«ã¯æ¬¡ã®ãªã¹ããè¿ããŸãã
ãªããžã§ã¯ãã®ãã¡ã€ã«åã
ã ãããã°ã©ã ã æ¹æ³
ãProgramãã¡ãœããã¯ãæå®ãããããã°ã©ã ãæå®ããããªããžã§ã¯ãã«ãªã³ã¯ããããã«æé ããŸã
ãã¡ã€ã«ã 次ã®æ¹æ³ã§åŒã³åºãããŸãã
ããã°ã©ã $env ã ;
ããã°ã©ã åã«ã¯ã`SUFEXE' æ§é å€æ°ã®å€ãè¿œå ãããŸã (
ããã©ã«ãã§ã¯ãWin32 ã·ã¹ãã ã§ã¯ `.exe'ãUnix ã·ã¹ãã ã§ã¯äœããããŸãã) æ¥å°ŸèŸããŸã ãªãå Žå
ãã¬ãŒã³ãã
ãªããžã§ã¯ããã¡ã€ã«ã®ä»£ããã«ãœãŒã¹ãã¡ã€ã«ãæå®ããããšãã§ããŸã -- `Objects' ã¡ãœããã¯
ãã¹ãŠã®ãã¡ã€ã«ããªããžã§ã¯ã ãã¡ã€ã«ã«å€æããããã«åŒã³åºãããããããã¹ãŠã®
äžèšã®ããªããžã§ã¯ããã¡ãœããã«é¢ãã芳å¯ã¯ããã®ã¡ãœããã«ãé©çšãããŸãã
ããã°ã©ã ã®å®éã®ãªã³ã¯ã¯ãå€éšã³ãã³ãã«ãã£ãŠåŠçãããŸãã
ãªããžã§ã¯ããã¡ã€ã«ã«èšå®ããã `%<' ã䜿çšã㊠`LINKCOM' æ§ç¯å€æ°ãå±éããããšãã
(æ瀺ãããé åºã§) ãªã³ã¯ããã`%>' ãã¿ãŒã²ããã«èšå®ãããŸã (`Command' ã¡ãœãããåç §ããŠãã ãã)ã
æ¡åŒµã®è©³çŽ°ã«ã€ããŠ)ã ãŠãŒã¶ãŒã¯ãæ§é ã«è¿œå ã®å€æ°ãèšå®ã§ããŸã
ãªã³ã¯ã«äœ¿çšããããã°ã©ã ãå®çŸ©ããããã®ãLINKããå«ãç°å¢ããLIBPATHãã
ã®ã©ã€ãã©ãªä»æ§ã§äœ¿çšããããã®ãã©ã€ãã©ãªæ€çŽ¢ãã¹ã®ã³ãã³ã§åºåããããªã¹ãã
ãã©ãŒã -llibãããã³ `LIBS' ã§ããªã³ã¯ããã©ã€ãã©ãªã®ãªã¹ããæå®ããŸã (ãããã㧠-llib
ãã©ãŒã ãŸãã¯åã«ãã¹åãšããŠã `LIBPATH' ãš `LIBS' ã®äž¡æ¹ã®çžå¯Ÿãã¹åã解éãããŸã
é¢é£ä»ããããã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ãäœæããããã£ã¬ã¯ããªã«çžå¯Ÿç
(絶察åãšäžäœçžå¯Ÿåã䜿çšã§ããŸã)ã çæã¯èªåçã«èšå®ãããŸã
`LIBS' ã«èšè¿°ãããŠããã©ã€ãã©ãªãžã®äŸå: ãããã®ã©ã€ãã©ãªã¯ãã«ãåã«ãã«ããããŸãã
ã³ãã³ãããªã³ã¯ãããŠããŸãã
ã ãå³æžé€šã æ¹æ³
ãLibraryãã¡ãœããã¯ãæå®ããããªããžã§ã¯ãããæå®ãããã©ã€ãã©ãªãäœæããããã«æé ããŸã
ãã¡ã€ã«ã 次ã®ããã«åŒã³åºãããŸãã
ã©ã€ãã©ãª $env ã ;
ã©ã€ãã©ãªåã«ã¯ã`SUFLIB' æ§æå€æ°ã®å€ãè¿œå ãããŸã (
ããã©ã«ãã§ã¯ãWin32 ã·ã¹ãã ã§ã¯ `.lib'ãUnix ã·ã¹ãã ã§ã¯ `.a')ãæ¥å°ŸèŸããŸã ãªãå Žå
ãã¬ãŒã³ãã
ãªããžã§ã¯ããã¡ã€ã«ã®ä»£ããã«ãœãŒã¹ãã¡ã€ã«ãæå®ããããšãã§ããŸã -- `Objects' ã¡ãœããã¯
ãã¹ãŠã®ãã¡ã€ã«ããªããžã§ã¯ã ãã¡ã€ã«ã«å€æããããã«åŒã³åºãããããããã¹ãŠã®
äžèšã®ããªããžã§ã¯ããã¡ãœããã«é¢ãã芳å¯ã¯ããã®ã¡ãœããã«ãé©çšãããŸãã
ã©ã€ãã©ãªã®å®éã®äœæã¯ãå€éšã³ãã³ãã«ãã£ãŠåŠçãããŸãã
ã©ã€ãã©ãªã¡ã³ããŒã«èšå®ããã `%<' ã䜿çšããŠã`ARCOM' æ§ç¯å€æ°ãå±éããããšãã (
æ瀺ãããé åº)ã`%>' ãäœæããã©ã€ãã©ãªã«æå® (`Command' ã¡ãœãããåç §)
æ¡åŒµã®è©³çŽ°)ã ãŠãŒã¶ãŒã¯ã³ã³ã¹ãã©ã¯ã·ã§ã³ç°å¢ã§å€æ°ãèšå®ã§ããŸãã
ã³ãã³ãã®åäœã«åœ±é¿ããŸãã ãããã«ã¯ã䜿çšããã¢ãŒã«ã€ãããã°ã©ã ã§ãããARããå«ãŸããŸãã
ARFLAGS ã¯ãAR ã«ãã£ãŠæå®ãããããã°ã©ã ã«äžãããããã©ã°ãå€æŽããããã«äœ¿çšã§ããŸãã
å¿ èŠã«å¿ããŠãã¢ãŒã«ã€ã玢åŒçæããã°ã©ã ã®ååã§ãããRANLIBã(ç¹å®ã®
need ãåŸè ã®æ©èœãå¿ èŠãšããªãå Žåã`ARCOM' ãåå®çŸ©ããŠãåŸè ã®æ©èœãå¿ èŠãšããªãããã«ããå¿ èŠããããŸãã
`RANLIB' ãåç §)ã
ãLibraryãã¡ãœããã䜿çšãããšãåãã©ã€ãã©ãªãè€æ°ã®ã¡ãœããã§æå®ã§ããŸã
åŒã³åºãã ãã¹ãŠã®åŒã³åºãããã®ãã¹ãŠã®å¯äžãªããžã§ã¯ã (ããã¯ã
ç°ãªããã£ã¬ã¯ããª) ãçµåãããåäžã®ã¢ãŒã«ã€ã ã³ãã³ãã«ãã£ãŠçæãããŸãã ããŒãã
ãã ããã©ã€ãã©ãªã®äžéšã®ã¿ãæå®ãããããã«ãã«ããæŽçãããšã
ã©ã€ãã©ãªã®ãã®éšåãçæãããŸã (æ®ãã¯æ¶ããŸã!)ã
ã ãã¢ãžã¥ãŒã«ã æ¹æ³
ãModuleãã¡ãœããã¯ããProgramãã¡ãœãããšãCommandãã¡ãœãããçµã¿åããããã®ã§ãã ããããã
å®è¡å¯èœããã°ã©ã ãçŽæ¥çæããå Žåããã®ã³ãã³ãã䜿çšãããšãç¬èªã®
å®éã«ã¢ãžã¥ãŒã«ãçæããã³ãã³ãã ã¡ãœããã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
ã¢ãžã¥ãŒã« $env ã ã ;
ãã®ã³ãã³ãã¯ãåçã«äœæããå Žåãªã©ã«åœ¹ç«ã¡ãŸãã
èªã¿èŸŒãŸããã¢ãžã¥ãŒã«ããŸãã¯éçã«ãªã³ã¯ãããã³ãŒã ã©ã€ãã©ãªã
ã ãäŸåããã æ¹æ³
`Depends' ã¡ãœããã䜿çšãããšãã¿ãŒã²ããã«è¿œå ã®äŸåé¢ä¿ãæå®ã§ããŸãã ããã¯
次ã®ããã«åŒã³åºãããŸãã
$env ã«äŸåã ;
ããã¯ãç¹ã«ã¹ãã£ããŒãååšããªãå Žå (ãŸãã¯ååšããå Žå) ã«åœ¹ç«ã€å ŽåããããŸãã
æžã蟌ã¿å¯èœ) ç¹å®ã®çš®é¡ã®ãã¡ã€ã«çšã éåžžãäŸåé¢ä¿ã¯èšç®ãããŸã
ã¡ãœããã«ãã£ãŠèšå®ãããæ瀺çãªäŸåé¢ä¿ã®çµã¿åããããèªåçã«
åŒã³åºããŸãã¯ãœãŒã¹ ãã¡ã€ã«ã®ã¹ãã£ã³ã«ãã£ãŠã
è€æ°ã®ã¿ãŒã²ããã«å¯Ÿããåäžã®äŸåé¢ä¿ã®ã»ããã¯ããžã®åç §ã䜿çšããŠæå®ã§ããŸãã
ã¿ãŒã²ããã®ãªã¹ãã Perl ã§ã¯ããªã¹ããåè§ã§å²ãããšã§ãªã¹ãåç §ãäœæã§ããŸãã
ãã©ã±ããã ãããã£ãŠã次ã®ã³ãã³ãïŒ
äŸå $env ['foo', 'bar'], 'input_file_1', 'input_file_2';
äž¡æ¹ã® foo & ã㌠ãã¡ã€ã«ã¯ããªã¹ããããå ¥åãã¡ã€ã«ã«äŸåããŸãã
ã ãç¡èŠããã æ¹æ³
`Ignore' ã¡ãœããã䜿çšãããšãCons ãæšè«ããäŸåé¢ä¿ãæ瀺çã«ç¡èŠã§ããŸãã
èªåã®ã 次ã®ããã«åŒã³åºãããŸãã
ç¡èŠ;
ããã¯ãã·ã¹ãã ããã㌠ãã¡ã€ã«ã®å€æŽã«ããåã³ã³ãã€ã«ãåé¿ããããã«äœ¿çšã§ããŸãã
çæãããã¿ãŒã²ããã«åœ±é¿ãäžããªãããšãç¥ãããŠãããŠãŒãã£ãªãã£ã
ããšãã°ãããã°ã©ã ãè€æ°ã®ã·ã¹ãã äžã® NFS ããŠã³ãããããã£ã¬ã¯ããªã«æ§ç¯ãããŠããå Žåã
ã®ç°ãªãã³ããŒãæ〠stdio.hãéãã¯ãã¹ãŠã®çœ²åã«åœ±é¿ããŸã
`#include ãå«ããœãŒã¹ ãã¡ã€ã«ããæ§ç¯ããã掟çã¿ãŒã²ãã'ã ããããã¹ãŠã®åå ã«ãªããŸã
ã·ã¹ãã ãå€æŽãããšãã«ããããã®ã¿ãŒã²ãããåæ§ç¯ããå¿ èŠããããŸãã ãããæãŸãããªãåäœã§ããå Žåã¯ã
次ã«ã次ã®è¡ã§äŸåé¢ä¿ãåé€ããŸã stdio.h ãã¡ã€ã«ïŒ
'^/usr/include/stdio\.h$' ãç¡èŠããŸãã
`Ignore' ã¡ãœããã®åŒæ°ã¯æ£èŠè¡šçŸã§ãããããç¹å¥ãªãã®ã§ããããšã«æ³šæããŠãã ããã
æåã¯ãšã¹ã±ãŒãããå¿ èŠããããæåã®å é ãŸãã¯æ«å°Ÿãåºå®ãããå ŽåããããŸãã
`^' ãŸã㯠`$' æåã䜿çšããåŒã
ã ãå¡©ã æ¹æ³
ãSaltãã¡ãœããã¯ãå°åºããããã¹ãŠã®çœ²åèšç®ã«å®æ°å€ãè¿œå ããŸã
ãã¡ã€ã«ã 次ã®ããã«åŒã³åºãããŸãã
ãœã«ã $string;
Salt å€ãå€æŽãããšããã¹ãŠã®æŽŸçãã¡ã€ã«ãå®å šã«åæ§ç¯ãããŸãã ããã¯ããããšãã§ããŸã
ç¹å®ã®å¿ èŠãªç¶æ³ã§åæ§ç¯ã匷å¶ããããã«äœ¿çšãããŸãã äŸãã°ã
`uname -s` ããœã«ãããŸãã
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ããªã³ã®å Žåã¯åžžã«ããã¹ãŠã®æŽŸçãã¡ã€ã«ã®å®å šãªåæ§ç¯ã匷å¶ããŸãã
ãã«ããå®è¡ããã (ãuname -sãã«ãã£ãŠå ±åããã) å€æŽã
ã ãUseCacheã æ¹æ³
`UseCache' ã¡ãœããã¯ãå ±æããã掟çãã¡ã€ã«ã®ãã£ãã·ã¥ãä¿æãããã Cons ã«æ瀺ããŸãã
åããããžã§ã¯ãã®å¥ã ã®ãã«ã ããªãŒéã
UseCache("ãã£ãã·ã¥/ ") âªâª warn("ãã£ãã·ã¥ãã£ã¬ã¯ããªãèŠã€ãããŸãã");
ã ããœãŒã¹ãã¹ã æ¹æ³
`SourcePath' ã¡ãœããã¯ããã¡ã€ã«ã®å®éã®ãœãŒã¹ ãã¹åãè¿ããŸãã
ãã«ã ãã£ã¬ã¯ããªå ã®ãã¹åã 次ã®ããã«åŒã³åºãããŸãã
$path = ãœãŒã¹ãã¹;
ã ãã³ã³ãã¹ã æ¹æ³
`ConsPath' ã¡ãœããã¯ãæå®ããããã¹ã掟çãã¡ã€ã«ã§ããå Žåã« true ãè¿ãã
ãã以å€ã®å Žå㯠undef (false)ã 次ã®ããã«åŒã³åºãããŸãã
$result = ConsPath ;
ã ãåå²ãã¹ã æ¹æ³
`SplitPath' ã¡ãœããã¯ãããã©ã«ãã§åºåãããæååã§è€æ°ã®ãã¹åãæ€çŽ¢ããŸãã
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ãã¹ ã»ãã¬ãŒã¿ (UNIX ã·ã¹ãã ã§ã¯ã:ããWindows NT ã§ã¯ã;ã)ãããã³
å®å šä¿®é£Ÿåãè¿ããŸãã 次ã®ããã«åŒã³åºãããŸãã
@paths = ã¹ããªãããã¹;
`SplitPath' ã¡ãœããã¯ã'#' ã§å§ãŸãååãé©åãªãããã¬ãã« ãã«ãã«å€æããŸãã
åå ('#' ãªã) ã䜿çšããçžå¯Ÿåããããã¬ãã«åã«å€æããŸãã
ã ãDirPathã æ¹æ³
`DirPath' ã¡ãœããã¯ãã«ã ãã¹ãè¿ããŸã å(s) ãã£ã¬ã¯ããªãŸãã¯ãã£ã¬ã¯ããªã®ãªã¹ãã
次ã®ããã«åŒã³åºãããŸãã
$cwd = DirPath ;
DirPath ã¡ãœããã®æãäžè¬çãªçšéã¯æ¬¡ã®ãšããã§ãã
$cwd = DirPath '.';
åäŒç€Ÿã®çŸåšã®ãã£ã¬ã¯ããªãžã®ãã¹ãååŸãã 城éå µ ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
ã ããã¡ã€ã«ãã¹ã æ¹æ³
`FilePath' ã¡ãœããã¯ãã«ã ãã¹ãè¿ããŸã å(s) ãã¡ã€ã«ãŸãã¯ãã¡ã€ã«ã®ãªã¹ãã ããã¯
次ã®ããã«åŒã³åºãããŸãã
$file = ãã¡ã€ã«ãã¹;
ã ãå©ããŠã æ¹æ³
ãHelpãã¡ãœããã¯ããŠãŒã¶ãŒããconsããåŒã³åºãããšãã«è¡šç€ºããããã«ã ããã¹ããæå®ããŸãã
-h'. ããã¯ãç¹å®ã®ã¿ãŒã²ãããå€ããã«ãã®ããã¥ã¡ã³ããæäŸããããã«äœ¿çšã§ããŸãã
ãã«ãããªãŒã®ãªãã·ã§ã³ãªã©ã 次ã®ããã«åŒã³åºãããŸãã
ãã«ã;
ãHelpãã¡ãœãã㯠XNUMX åã ãåŒã³åºãããšãã§ããéåžžã¯å é ã§æå®ããå¿ èŠããããŸãã
ã¬ãã« æ§ç¯ãã ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
æ¡åŒµ ãã¡ãªãã
ãªãŒããŒã©ã€ã å»ºèš variables
Cons ãæ¡åŒµããã«ã¯ããã€ãã®æ¹æ³ããããé£æ床ãç°ãªããŸãã æãç°¡åãª
ã¡ãœããã¯ãããã©ã«ãã®ç°å¢ã«åºã¥ããŠãç¬èªã®æ§ç¯ç°å¢ãå®çŸ©ããããšã§ãã
ãã ããç¹å®ã®ããŒãºãåæ ããããã«å€æŽãããŠããŸãã å€ãã®å ŽåãC ããŒã¹ã®å Žåã¯ããã§ååã§ãã
ã¢ããªã±ãŒã·ã§ã³ã `new' ã³ã³ã¹ãã©ã¯ã¿ãš `clone' ããã³ `copy' ã¡ãœããã䜿çšããŠã
ãã€ããªããç°å¢ãäœæããŸãã ãããã®å€æŽã¯ãåºç€ãšãªããã®ã«å¯ŸããŠå®å šã«ééçã§ãã
城éå µ ãã¡ã€ã«ã
è¿œå æ°è£œå ã¡ãœãã
ããå°ãå³ããå€æŽãå¿ èŠãªå Žåã¯ã`cons' ã«æ°ããã¡ãœãããè¿œå ããããšããå§ãããŸãã
ããã±ãŒãžã ããã¯éåžžã«åçŽãªæ¡åŒµæ©èœã®äŸã§ãã
èŠæ±ãããå Žæã«ãã tcl ã¹ã¯ãªããã§ãããæåã«ã¹ã¯ãªãããç·šéããŠãã©ãããã©ãŒã ãåæ ããŸãã
ã¹ã¯ãªããã«ã€ã³ã¹ããŒã«ããå¿ èŠãããäŸåãã¹:
# cons::InstallScript - ã·ã§ã«ã®ãã©ãããã©ãŒã äŸåããŒãžã§ã³ãäœæãã
# æåå ``#!your-path-here'' ããã©ãããã©ãŒã åºæã®ãã®ã«çœ®ãæããã¹ã¯ãªãã
# ãã¹ $BIN_DIR.
ãµãã³ã³::InstallScript {
ç§ã® ($env, $dst, $src) = @_;
ã³ãã³ã $env $dst, $src, qq(
sed s+your-path-here+$BIN_DIR+ %< > %>
chmod oug+x %>
);
}
ãã®ã¡ãœãã㯠`cons' ããã±ãŒãžã§çŽæ¥å®çŸ©ãããŠããããšã«æ³šæããŠãã ãã (ååã®åã«
`cons::' ã䜿çš)ã ãã®æ¹æ³ã§è¡ãããå€æŽã¯ããã¹ãŠã®ç°å¢ã§ã°ããŒãã«ã«è¡šç€ºãããŸãã
次ã®äŸã®ããã«åŒã³åºãããšãã§ããŸãã
InstallScript $env "$BIN/foo", "foo.tcl";
äžè¬æ§ãå°ãæ¹åããããã«ã`BINDIR' å€æ°ã
åŒæ°ãŸãã¯æ§ç¯ç°å¢ããååŸããã -- `%BINDIR' ãšããŠã
ãªãŒããŒã©ã€ã ã¡ãœãã
ã¡ãœããããconsãåå空éã«è¿œå ãã代ããã«ãæ°ããããã±ãŒãžãå®çŸ©ã§ããŸã
`cons' ããã±ãŒãžããæ¢åã®ã¡ãœãããç¶æ¿ããä»ã®ã¡ãœããããªãŒããŒã©ã€ããŸãã¯è¿œå ããŸãã ãã
Perl ã®ç¶æ¿ã¡ã«ããºã ã䜿çšããŠå®è¡ã§ããŸãã
次ã®äŸã§ã¯ãæšæºããªãŒããŒã©ã€ãããæ°ããããã±ãŒãž `cons::switch' ãå®çŸ©ããŠããŸãã
ãã©ã€ãã©ãªãã¡ãœããã ãªãŒããŒã©ã€ããããã¡ãœããã¯ãã©ã€ãã©ãªã§ã¯ãªãããªã³ã¯ãããã©ã€ãã©ãª ã¢ãžã¥ãŒã«ããã«ãããŸã
ã¢ãŒã«ã€ãã æ°ããã³ã³ã¹ãã©ã¯ã¿ãæäŸãããŸãã ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§äœæãããç°å¢ã¯ã
æ°ããã©ã€ãã©ãª ã¡ãœããããããŸãã ä»ã®äººã¯ããŸããã
ããã±ãŒãžã®çæ::ã¹ã€ãã;
BEGIN {@ISA = 'çæ'}
ãµããã¥ãŒ{
ã·ãã;
æ°ããã³ã³ã¹(@_)ãç¥çŠããŸãã
}
ãµãã©ã€ãã©ãª {
my($env) = ã·ãã;
my($lib) = ã·ãã;
my(@objs) = ãªããžã§ã¯ã $env @_;
ã³ãã³ã $env $lib, @objs, q(
%LD -r %LDFLAGS %< -o %>
);
}
ãã®æ©èœã¯ã次ã®äŸã®ããã«åŒã³åºãããšãã§ããŸãã
$env = æ°ãã cons::switch(@overrides);
...
ã©ã€ãã©ãª $env 'lib.o', 'foo.c', 'bar.c';
åŒã³åºã ãã¡ãªãã
`cons' ã³ãã³ãã¯éåžžããã«ã ããªãŒã®ã«ãŒãããåŒã³åºãããŸãã ã æ§ç¯ãã file
ãã®ãã£ã¬ã¯ããªã«ååšããå¿ èŠããããŸãã `-f' åŒæ°ã䜿çšãããŠããå Žåãä»£æ¿ æ§ç¯ãã
file ã䜿çšããããšãã§ããŸã (ãããŠã`cons' ã cd ããããããããã代æ¿ã«ãŒãã䜿çšã§ããŸã)ã æ§ç¯ãã
ãã¡ã€ã«ãå«ããã£ã¬ã¯ããª)ã
`cons' ããã«ã ããªãŒã®ã«ãŒãã®åãã `-t' åŒæ°ã§åŒã³åºããããšã
ãã£ã¬ã¯ããªéå±€ãäžã£ãŠã æ§ç¯ãã ãã¡ã€ã«ã (å¥ã®ååã§ãæ§ããŸãã
ã³ãã³ãã©ã€ã³ã§æå®ãããã¿ãŒã²ããã¯å€æŽãããŸãã
çºèŠããããã®ã«é¢é£ãã æ§ç¯ãã ãã¡ã€ã«ã ããšãã°ã次ãå«ããã£ã¬ã¯ããªãã
ãããã¬ãã« æ§ç¯ãã ãã¡ã€ã«ã次ã®åŒã³åºã:
% cd libfoo/ãµããã£ã¬ã¯ããª
% cons -t ã¿ãŒã²ãã
ãšãŸã£ããåãã§ãïŒ
% cons libfoo/subdir/target
ãã£ã¬ã¯ããªéå±€ã«ãããã©ã«ããã¿ãŒã²ãããæå®ãããŠããå Žå æ§ç¯ãã or
城éå µ `cons -t' ãå®è¡ãããã£ã¬ã¯ããªä»¥äžã®ããã©ã«ãã®ã¿ãŒã²ããã®ã¿
åŒã³åºããããã®ããã«ããããŸãã
ã³ãã³ãã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
çæ--
ã³ã©ãã¬ãŒ åŒæ° 次ã®ãããããä»»æã®é åºã§æå®ã§ããŸãã
ã¿ãŒã²ãã æå®ãããã¿ãŒã²ããããã«ãããŸãã ããã ã¿ãŒã²ãã ãã£ã¬ã¯ããªã§ããå Žåãååž°çã«ãã«ãããŸã
ãã®ãã£ã¬ã¯ããªå ã®ãã¹ãŠã
+ãã¿ãŒã³ å¶éãã 城éå µ äžèŽãããã®ã ããšèŠãªããããã¡ã€ã« ãã¿ãŒã³ãã¿ã³ã®é£ã«ãã
Perl ã®æ£èŠè¡šçŸã è€æ°ã® `+' åŒæ°ãåãå ¥ããããŸãã
å=
ã»ãã å 貎㶠ãŽã¡ã« ãããã¬ãã«ã«æž¡ããããARGãããã·ã¥ã§ æ§ç¯ãã ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
`-cc' ãã£ãã·ã¥ããååŸãããšãã«å®è¡ãããã³ãã³ãã衚瀺ããŸãã ããã
ãã¡ã€ã«ãååŸãããããšã瀺ãããŸãã ããã¯äŸ¿å©ã§ã
å®éã®ãã«ã ãã°ãšæ¯èŒã§ãããã«ã ãã°ãçæããŸãã
`-cd' ãã¹ãŠã®ãã£ãã·ã³ã°ãç¡å¹ã«ããŸãã ãã£ãã·ã¥ããååŸãããããã£ãã·ã¥ã«ãã©ãã·ã¥ãããããŸããã
`-cr' äŸåé¢ä¿ãã©ã³ãã ãªé åºã§æ§ç¯ããŸãã ããã¯ãè€æ°æ§ç¯ããå Žåã«äŸ¿å©ã§ãã
ãã£ãã·ã¥ãæå¹ã«ãªã£ãŠããåæ§ã®ããªãŒã
`-cs' ææ°ã§ããããšãå€æããæ¢åã®ãã«ã ã¿ãŒã²ããããã£ãã·ã¥ãšåæããŸãã
ããã¯ããã£ãã·ã¥ã -cc ã§ç¡å¹ã«ãªã£ãŠããå ŽåããŸãã¯æè¿æå¹ã«ãªã£ãã°ããã®å Žåã«åœ¹ç«ã¡ãŸãã
UseCache ã䜿çšããŸãã
`-d' äŸåé¢ä¿ã®ãããã°ãæå¹ã«ããŸãã
`-f'
ã®ä»£ããã«æå®ããããã¡ã€ã«ã䜿çšããŸãã æ§ç¯ãã (ããããæåã«å å«ã«å€æŽ
ã®ãã£ã¬ã¯ã㪠file).
`-h' çŸåšã®ãã«ãã«ããŒã«ã«ãªãã«ã ã¡ãã»ãŒãžãå®çŸ©ãããŠããå Žåã¯ããã®ãã«ã ã¡ãã»ãŒãžã衚瀺ããŠçµäºããŸãã
`-k' ãšã©ãŒã®åŸãå¯èœãªéãç¶è¡ããŸãã
ã-oã
äžæžããã¡ã€ã«ãèªã file.
`-p' æå®ãããããªãŒã®å»ºèšè£œåã衚瀺ããŸãã ãã«ãã¯è©Šè¡ãããŸããã
`-pa' ã³ã³ã¹ãã©ã¯ã·ã§ã³ ãããã¯ããšé¢é£ããã¢ã¯ã·ã§ã³ã衚瀺ããŸãã ãã«ãã¯è©Šè¡ãããŸããã
`-pw' 補åãšããããå®çŸ©ãããŠããå Žæã衚瀺ããŸãã ãã«ãã¯è©Šè¡ãããŸããã
`-q' ã¿ãŒã²ããã®ã€ã³ã¹ããŒã«ãšåé€ã«ã€ããŠåé·ã«ãªããªãããã«ããŸãã
`-r' é¢é£ãã建èšè£œåãåé€ããŸã. ãã«ãã¯è©Šè¡ãããŸããã
`-R'
ã§ãã¡ã€ã«ãæ€çŽ¢ äŒæ¯ã è€æ° -R äŒæ¯ ãã£ã¬ã¯ããªã¯
æå®ãããé åºã
`-t' ãã£ã¬ã¯ããªéå±€ãäžã«ç§»åããŠã æ§ç¯ãã ãã¡ã€ã«ãååšããªãå Žå
çŸåšã®ãã£ã¬ã¯ããªã«ã ã¿ãŒã²ããã¯ã
æ§ç¯ãã ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
`-v' `cons' ããŒãžã§ã³ã衚瀺ããåŠçãç¶è¡ããŸãã
`-V' `cons' ããŒãžã§ã³ã衚瀺ããŠçµäºããŸãã
`-wf'
èæ ®ããããã¹ãŠã®ãã¡ã€ã«åã file.
`-x' ãã®ãããªãã«ãã¡ãã»ãŒãžã衚瀺ããŠçµäºããŸãã
æ§æåŒæ° ã§åŠçãããä»»æã®åŒæ°ã«ããããšãã§ããŸã æ§ç¯ãã ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
ããã¹ãã§ããããšã«æ³šæããŠãã ãã -- åŒæ°ãã³ã³ã¹ã«åé¢ããåŒæ°ã
ã§åŠçããã æ§ç¯ãã ãã¡ã€ã«ã«ãœãããŠã§ã¢ãæå®ããå¿ èŠããããŸãã
ã®åŠç æ§æåŒæ° 次ã®ãããªæšæºããã±ãŒãžã§å®è¡ã§ããŸã ã²ãããã ãŸãã¯ãã®
ããªã¢ã³ãããŸãã¯ä»»æã®ãŠãŒã¶ãŒå®çŸ©ããã±ãŒãžã çæ ã§ééããŸã æ§æåŒæ° as @ARGV &
ã®åŸã«äœã解éããããšããŸããã --.
% cons -R /usr/local/repository -d os=solaris +driver -- -c test -f DEBUG
以äžã cons ã«æž¡ããŸã
-R /usr/local/repository -d os=solaris +ãã©ã€ããŒ
ãããŠããããã¬ãã«ãŸã§ æ§ç¯ãã ãã¡ã€ã«ãšã㊠@ARGV
-c ãã¹ã -f ãããã°
ãcons -rãã«æ³šæããŠãã ããã å®å šãªååž°ç㪠`make clean' ãšåçã§ãããäœãå¿ èŠãããŸãã
ã§ã®ãµããŒã æ§ç¯ãã ãã¡ã€ã«ãŸãã¯ä»»æ 城éå µ ãã¡ã€ã«ã ããã¯ã次ã®å Žåã«æã圹ç«ã¡ãŸãã
ãã¡ã€ã«ããœãŒã¹ ãã£ã¬ã¯ããªã«ã³ã³ãã€ã«ããŸã ( ãã«ã & export ãã£ã¬ã¯ããªã
ãã®åŸããã£ã¬ã¯ããªãåé€ã§ããŸãïŒã
ãªãã·ã§ã³ `-p'ã`-pa'ãããã³ `-pw' ã¯ãèªæžã®è£å©ãšããŠäœ¿çšããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã
ã¹ã¯ãªãããŸãã¯ãããã®ãããã°ã ã€ã³ã¹ããŒã«ããã¹ã¯ãªãããç¥ãããå Žå ãšã¯ã¹ããŒã/ã€ã³ã¯ã«ãŒã/foo.h,
ããšãã°ã次ã®ããã«å ¥åããŸãã
% cons -pw ãšã¯ã¹ããŒã/ã€ã³ã¯ã«ãŒã/foo.h
䜿ãæ¹ & æžã蟌㿠äŸåé¢ä¿ ã¹ãã£ã
QuickScan ã䜿çšãããšãã¿ãŒã²ããã«äŸåããªãã·ã³ãã«ãªã¹ãã£ããŒããœãŒã¹ ãã¡ã€ã«çšã«ã»ããã¢ããã§ããŸãã ããã ã
XNUMX ã€ã® QuickScan ã¹ãã£ããŒãä»»æã®ãœãŒã¹ ãã¡ã€ã«ããã³ç°å¢ã«é¢é£ä»ããããšãã§ããŸãã
QuickScan ã¯æ¬¡ã®ããã«åŒã³åºãããŸãã
QuickScan CONSENV CODEREFããã¡ã€ã«å [ããã¹]
CODEREF ã«ãã£ãŠåç §ããããµãã«ãŒãã³ã¯ãå«ãŸãããã¡ã€ã«åã®ãªã¹ããè¿ãããšãæåŸ ãããŠããŸã
FILE ã§çŽæ¥ã 次ã«ããããã®ãã¡ã€ã«åãã¹ãã£ã³ãããŸãã ãªãã·ã§ã³ã® PATH åŒæ°
ãŠãŒã¶ãŒæäŸã®
ãµãã«ãŒãã³ã PATH ã¯ãã«ãã¯ã¢ãã ãã£ã¬ã¯ããªåã®é åãžã®åç §ããŸãã¯
ã·ã¹ãã ã®åºåãæå (UNIX ã·ã¹ãã ã§ã¯ã:ããã·ã¹ãã ã§ã¯ã;ã) ã§åºåãããååã®æåå
Windows NTïŒã
ãµãã«ãŒãã³ã¯ããã¡ã€ã«ã®åè¡ã«å¯Ÿã㊠XNUMX ååŒã³åºããã$_ ãçŸåšã®è¡ã«èšå®ãããŸãã
ãµãã«ãŒãã³ãè¿œå ã®è¡ãããã«èšãã°ãã¡ã€ã«å šäœã調ã¹ãå¿ èŠãããå Žåã¯ã
次ã«ããã¡ã€ã«ãã³ãã« SCAN ãããããèªäœãèªã¿åãããšãã§ããŸãã 次ã®å Žåãã«ãŒããçµäºããããšããããŸãã
ãã¡ã€ã«ãã³ãã«ãéããããšã«ããããã以äžã€ã³ã¯ã«ãŒãæ å ±ãå©çšã§ããªãããšãããããŸãã
æ€çŽ¢ãã¹ãæå®ãããŠãããã©ããã«é¢ä¿ãªããQuickScan ã¯æåã«ãã¡ã€ã«ã®æ€çŽ¢ãè©Šã¿ãŸãã
çŸåšã®ãã£ã¬ã¯ããªããã®çžå¯Ÿãã¹ (QuickScan ã«çŽæ¥æäŸãããæäžäœãã¡ã€ã«ã®å Žå)ã
ãŸãã¯ããã¡ã€ã«ãåç §ãããã¡ã€ã«ãå«ããã£ã¬ã¯ããªããã ããã¯ããŸããªã
äžè¬çã§ãããç¹ã«èªåã§æžãäœè£ãããå Žåã¯ååã«è¯ãããã§ã
ãŠãŒãã£ãªãã£ã§ãããæšæºçãªæ¹æ³ã§æ€çŽ¢ãã¹ã®äœ¿çšãå¶åŸ¡ã§ããŸãã æåŸã«ã
çŸåšãæ€çŽ¢ãã¹ã¯ã³ãã³ã§åºåãããŠããŸãã ããã§ã¯ãNT é£å¶ã¯æºè¶³ã§ããªããããããŸããã
ããã¯å®éã®äŸã§ãã æ§ç¯ãã ããã«ãã¡ã€ã«ïŒ
ãµãã³ã³::SMFgen {
my($env, @tables) = @_;
foreach $t (@tables) {
$env->QuickScan(sub { /\b\S*?\.smf\b/g }, "$t.smf",
$env->{SMF_INCLUDE_PATH});
$env->ã³ãã³ã(
["$t.smdb.cc","$t.smdb.h","$t.snmp.cc","$t.ami.cc", "$t.http.cc"],
"$t.smf",
q(
smfgen %( %SMF_INCLUDE_OPT %) %
)
);
}
}
[`$env->QuickScan ...' ããã³ `$env->Command ...' ã®åœ¢åŒã¯äœ¿çšããªãã§ãã ããã
å¿ èŠã§ãããäœããã®çç±ã§ããã®ç¹å®ã®åŒã³åºãã«å¿ èŠã§ãã ãããçŸããŸã
Perl ã®ãã°ããç§ã®èª€è§£ã§ãã ãã®åŒã³åºãã¹ã¿ã€ã«ã¯
åžžã«å¿ èŠãšæãããã]
ããã«ããããã©ãŒã ã®ãã¹ãŠã®ååãæ€çŽ¢ãããŸããã¡ã€ã«å ã® .smfã å Žåã§ãååãè¿ããŸã
ãããã¯ã³ã¡ã³ãå ã«ãããŸãããåé¡ãããŸãã (ã¡ã«ããºã ã¯äœåãªãã¡ã€ã«ã蚱容ããŸãã
ãããã¯ããã¡ã€ã«ãèŠã€ãããªããšãã«æ°ä»ããããšããåæã§åã«ç¡èŠãããŸãã
ããã°ã©ã (ãã®äŸã§ã¯ smfgen) ãå®éã«åŒã³åºãããŸã)ã
ã¹ãã£ããŒã¯ãç¹å®ã®ãœãŒã¹ ãã¡ã€ã«ã«å¯ŸããŠã®ã¿åŒã³åºãããŸãã
æšã ããã¯ãç¹å®ã®ãœãŒã¹ ãã¡ã€ã«ã«å¯Ÿã㊠XNUMX åã ãåŒã³åºãããŸãã
åãã¹ãã£ããŒãæ§ç¯ããå¥ã®æ¹æ³ã次ã«ç€ºããŸãã ããã¯æ瀺çãªã³ãŒãåç §ã䜿çšããŠããã
ãŸããïŒãã®å Žåã¯äžå¿ èŠã«ïŒãã¡ã€ã«å šäœãèªã¿åããŸãã
ãµããã€ã¹ãã£ã³{
ç§ã®ïŒ@å«ãïŒ;
ãã
ããã·ã¥ (@includes, /\b\S*?\.smf\b/g);
} ãã®é;
@å«ã
}
ã«ãŒãã®é åºãéã«ãªããã«ãŒã ãã¹ããæåŸã«ãªãããšã«æ³šæããŠãã ããã ããã¯
æåã®è¡ã¯ãã§ã«èªã¿åãããŠããããã§ãã ãã®ã¹ãã£ãã¯ãœãŒã¹ã«æ¥ç¶ã§ããŸã
ãã¡ã€ã«:
QuickScan $env \myscan, "$_.smf";
ãµããŒã ãã㊠ææ¡
çæã¯ããŠãŒã¶ãŒ ã³ãã¥ããã£ã«ãã£ãŠç¶æãããŸãã 賌èªããã«ã¯ãã«ã¡ãŒã«ãéä¿¡ããŠãã ãã çæ-è°è«-
[ã¡ãŒã«ä¿è·] äœã§ ç³ã蟌ã.
ããææ¡ãå ±åããŠãã ãã [ã¡ãŒã«ä¿è·] ã¡ãŒãªã³ã°ãªã¹ãã
onworks.net ãµãŒãã¹ã䜿çšããŠãªã³ã©ã€ã³ã§ã³ã³ã¹ã䜿çšãã