ËüÒÔǰ½Ð bud£¬ËùÒÔÕâÀï»ìÓà bud ºÍbuild£¬¶¼Ö¸µÄͬһ¸ö¶«Î÷
buildÊÇDÓïÑԵıàÒ빤¾ß£¬Ï൱ÓÚCµÄmakeÃüÁî¡£
µ«Ëü¸ü¼òµ¥ÇÒºÃÓã¬ÒòΪËüÄÜ´¦Àí import Óï¾ä£¬×Ô¶¯ÔØÈëÒÀÀµµÄÎļþ¡£
¿´¹ý±¾Îĺ󣬻ù±¾ÉÏ¿ÉÒÔʹÓÃÁË¡£
Èç¹ûÄãÏëÓÃËüµÄ¸ß¼¶¹¦ÄÜ£¬µ±È»»¹µÃ»¨Ê±¼äÈ¥Ñо¿Ëü¡£
build »áÉæ¼°µÄÎļþÓУº
brfÎļþ £¨Build Response File£© -- budÃüÁîµÄ²ÎÊýÎļþ
Ô´ÎļþµÄ Pragmas Ö¸Áî
rdfÎļþ £¨Rule Definition File£© -- ¹æÔò¶¨ÒåÎļþ
mdfÎļþ £¨Macro Definition File£© -- ºê¶¨ÒåÎļþ
cfgÎļþ £¨Configuration File£© -- ÅäÖÃÎļþ
pflÎļþ £¨Profile File£© -- ÅäÖÃÎļþ£¿
ÆäÖУ¬brfÎļþÀïÃæÐ´µÄ¾ÍÊÇһЩbuildÃüÁîµÄ²ÎÊý£¬ËùÒÔ£¬ÏÈ´Ó²ÎÊý¿ªÊ¼¡£
ÏÈ¿´¼¸¸ö¼òµ¥²ÎÊý£¬È»ºóÔÙ˵˵brfÎļþ£¬×îºó°ÑÆäËû²ÎÊý¼òµ¥µÄÁÐһϡ£
[×¢£ºÒÔÏÂÔÚLinuxºÍdmdϲâÊÔ¹ý£¬Ã»ÓвâÊÔwinºÍgdc]
buildÃüÁîµÄ¸ñʽÊÇ£º
- build <sourcefile> [<switches> ] [<otherfiles> ]
- sourcefile Ò»°ãÊǰüÀ¨mainº¯ÊýµÄÔ´Îļþ
- switches ÉÏÃæÁгöµÄ²ÎÊý
- otherfiles Á´½Ó¿â£¬objectÎļþ£¬ºê¶¨ÒåÎļþµÈµÈÆäËûÎļþ£¨²ÂµÄ£º£©£©
²ÎÊýºÍÔ´Îļþ¶¼Ã»ÓÐ˳Ðò£¬¿ÉÒÔÈÎÒâÅÅÁÐ -- ϲ»¶°ÑÔ´Îļþ·ÅÇ°Ãæ£¬±àÒë²ÎÊý·ÅºóÃæ£¬ÒòΪ±àÒë²ÎÊý¾³£¸Ä
BudµÄ³£ÓòÎÊýÖ®Ò»£º³£¹æÑ¡Ïî
- -exec ±àÒë³É¹¦ºó£¬ÔËÐÐËü
- -cleanup ÔÚ±àÒëÍê³Éºó£¬°ÑÉú³ÉµÄÖмäÎļþɾ³ýµô£¬±ÈÈç .o Îļþ
- -full ±àÒëËùÓеÄÎļþ£¬¼´Ê¹Ã»ÓÐÐÞ¸ÄÒ²Òª±àÒëÒ»±é
- -T<name> Ö¸¶¨Ä¿±êµÄÎļþÃû
- -od<path> Ö¸¶¨.o µÈÁÙʱÎļþµÄÊä³öĿ¼
- -silent °²¾²Ä£Ê½£¬²»Êä³ö¶àÓàÐÅÏ¢
- -test Ö»ÊÇÏÔʾҪµ÷ÓõÄÃüÁ²»Êµ¼Ê±àÒë
- -v build ºÍ dmd ¶¼Êǵ÷ÊÔģʽ
- -V build Êǵ÷ÊÔģʽ£¬µ«dmdÃüÁî²»ÊÇ
- -info ÏÔʾbuildÃüÁîµÄ°æ±¾ºÅµÈÐÅÏ¢
- -names ÏÔʾҪ±àÒëµÄÎļþÃû
- -uses[=fname] Êä³ö½»²æÒýÓÃÎļþ
Èç¹û²»ÊÇbudµÄ²ÎÊý£¬»á´«µÝ¸ødmd¡£±ÈÈç¿ÉÒÔÖ¸¶¨ -op -L-l ²ÎÊý [×¢£º²ÂµÄ£¬²»¿Ï¶¨]
ÃüÁî²ÎÊýÈç¹ûÊÇÒ»¸öºáÏߣ¨-£©£¬±íʾÆôÓã¬Èç¹ûÊÇÁ½¸öºáÏߣ¨--£©£¬±íÃ÷½ûÓá£
±ÈÈ磺 bud --cleanup -full
Á½¸öºáÏߣ¨--£©Ò»°ãºÍbrfÎļþÅäºÏʹÓ㬱íÃ÷Òª½ûÓÃbrfÎļþÖеÄij¸ö±àÒë²ÎÊý
¸ø¸öÀý×Ó£ºa.d ºÍ b.d
- module a;
- import b;
- import std.stdio;
- void main(char[][] arg)
- {
- writef("in Module A: ");
- writefln(arg);
- print_b();
- }
- module b;
- import std.stdio;
- void print_b()
- {
- writefln("in Module B: b.d");
- }
×î¼òµ¥µÄ±àÒë·½·¨£º
- bud a.d
- bud a # ¿ÉÒÔ²»Ð´ .d ºó׺
×¢Ò⣬ÕâÀï²»ÐèÒªÖ¸¶¨ b.d£¬ÒòΪa.dÖеÄimportÆðÁË×÷Óá£
budÃüÁî»á×Ô¶¯´¦Àí¡£ÊDz»ÊǺܼòµ¥£¿
±àÒëºóÈÃËüÔËÐУº
- bud a.d -exec
- bud a.d -execXXX # ¸ø¸ö²ÎÊýXXX
- bud a.d -exec"XXX YYY" # ¸ø2¸ö²ÎÊýXXX YYY ; ÔÚbashϲ»ÄÜÕýÈ·ÔËÐУ¬²»ÖªµÀÔõô´¦Àí
¸Ä¸öÃû×Ö£º
- bud a.d -Ta.out # ÎļþÃûÊÇ£ºa.out ;ÔÚÃüÁîÐÐÏ£¬Éú³É²»ÁËa.out£¬²»ÖªµÀÔõô´¦Àí;(
- bud a.d -Ttest_{Target} # ÎļþÃûÊÇ£ºtest_a
Èç¹ûÄã²»ÐÞ¸Äa.d»òÕßb.d£¬¶à´ÎÔËÐÐÉÏÃæµÄÃüÁ»áÌáʾ£º
- Files are up to date, no build required.
Õâ¸öºÍmakeµÄÔÀíÒ»Ñù£¬Èç¹ûÄãÏëÿ´Î¶¼±àÒ룬¿ÉÒÔÕâô°ì£º
- bud a.d -full
Èç¹û¿´×ÅÄÇô¶àµÄ.oÎļþ²»Ë¬£¬¾Í°ÑËüɾµô£º
- bud a.d -clean # -clean ÊÇ-cleanupµÄ±ðÃû
¼¸¸öµ÷ÊÔÑ¡Ï
- bud a.d -names # ÏÔʾҪ±àÒëµÄÎļþÃû
- bud a.d -test # ÏÔʾdmdºÍgccµÄµ÷ÓÃÃüÁî
- bud .ad -uses=x # Éú³É½»²æÒýÓÃÎļþ£¬Ä¬ÈÏÎļþÃûÊÇa.use£¬ÕâÀïÖ¸¶¨Îªx
- bud a.d -v # ³ýÁËbudµÄµ÷ÊÔÐÅÏ¢£¬»¹ÏÔʾdmd±àÒëÆ÷µÄµ÷ÊÔÐÅÏ¢
- bud a.d -V # Ö»ÏÔʾbudµÄµ÷ÊÔÐÅÏ¢
useÎļþ£º
- [USES]
- a.d <> /usr/local/src/phobos/std/stdio.d
- a.d <> b.d
- b.d <> /usr/local/src/phobos/std/stdio.d
- [USEDBY]
- /usr/local/src/phobos/std/stdio.d <> a.d
- /usr/local/src/phobos/std/stdio.d <> b.d
- b.d <> a.d
¿ÉÒÔ¿´µ½£¬ÓÐ2¸ö±êÇ©£º[USES] ºÍ[USEDBY]
[USES]¡¡¡¡µÄº¬ÒåÊÇ A ÎļþʹÓÃÁËÄÄЩÎļþ
[USEDBY]¡¡µÄº¬ÒåÊÇ ÄÄЩ Îļþ ±ð AÎļþ ʹÓÃÁË
ÿÐеÄÎļþÃûÖ®¼äÓà <> ·Ö¸î
ÉýÐòÅÅÁÐ
BudµÄ³£ÓòÎÊýÖ®¶þ£º±àÒëÑ¡Ïî
[×¢£º¶Ô±àÒëÆ÷µÄÊõÓï²»ÊǺÜÇå³þ£¬»áÓÐЩ±í´ï²»Çå³þ¡£»ØÍ·Ñо¿Ò»Ï±àÒëÊõÓÔÙÀ´ÐÞ¸ÄÕâ¶Î¡¿
±àÒë¹ý³ÌÒ»°ãÊÇ a.d (Ô´Îļþ) -> a.o (objectÎļþ) -> a.exe (¿ÉÖ´ÐÐÎļþ)£¬ÕâÀï²»ÌÖÂÛÔ¤´¦ÀíµÈ¹ý³Ì
objectÎļþ»¹¿ÉÒÔ±àÒë³É ¾²Ì¬Á´½Ó¿â(liba.a) »òÕß ¶¯Ì¬Á´½Ó¿â(liba.so)
a.d µ½ a.o µÄ¹ý³Ì½Ð±àÒë ¹ý³Ì
a.o µ½ a.exe µÄ¹ý³Ì½Ð Á¬½Ó¹ý³Ì(link)
a.o µ½ liba.a/so µÄ¹ý³Ì½Ð lib¹ý³Ì [×¢£ºÊµÔÚ²»ÖªµÀÔõô·Òë;( ]
bud ĬÈÏ»á°ÑÓÐmain()»òÕßWinmain()º¯ÊýµÄÔ´³ÌÐò±àÒë³É¿ÉÖ´ÐÐÎļþ£»
Èç¹ûûÓÐÕâÁ½¸öº¯Êý£¬Ôò»á±»±àÒë³ÉÁ´½Ó¿âÎļþ(.a)
ÏÂÃæÕâЩѡÏî¿ÉÒԸıäÕâЩÐÐΪ£º
²»ÖªµÀÔõôÉú³É .soµÄÎļþ£¿
- -obj Ö»ÊÇ´´½¨ objectÎļþ£¨.o£©£¬²»½øÐÐlinkºÍlib²Ù×÷£¬µÈͬÓÚͬʱ¼Ó -nolink -nolib
- -link ¼´Ê¹Ô´ÎļþÖÐûÓÐmain()º¯Êý£¬Ò²Ç¿ÖƽøÐÐÁ¬½Ó¡£
- main()º¯ÊýÒ»°ãÔÚÁ´½Ó¿âÖУ¬¶ø²»ÔÚÒª±àÒëµÄÔ´´úÂëÖÐ
- -nolink Õë¶ÔÓÐmain()º¯ÊýµÄÔ´Îļþ£º²»½øÐÐlink²Ù×÷£¬Ö»Éú³É .o Îļþ
- -lib Õë¶ÔÓÐmain()º¯ÊýµÄÔ´Îļþ£º²»½øÐÐlink²Ù×÷£¬Ö»Éú³É .a Îļþ
- -nolib Õë¶ÔûÓÐmain()º¯ÊýµÄÔ´Îļþ£º²»½øÐÐlib²Ù×÷£¬Ö»Éú³É .o Îļþ
- -allobj ²»¶®£º£¨
- -LIBOPT Ö¸¶¨ÒªÁ¬½ÓµÄ²ÎÊý
- -LIBPATH Ö¸¶¨Á´½Ó¿âµÄĿ¼
- -PP Ö¸¶¨³ýµ±Ç°Â·¾¶ÍâµÄ ÆäËûÔ´ÎļþµÄËÑË÷·¾¶
¾ÙÀý°É£º
- #-obj£ºÖ»Éú³É.o Îļþ
- bud a.d -obj # »áͬʱÉú³É a.o b.o
- bud b.d -obj # Éú³É b.o£¬²»»áÉú³É a.o ;)
- #-link£ºÇ¿ÖÆÁ¬½Ó
- bud a.d -obj # Éú³É a.o
- bud b.d a.o # Éú³É b ¿ÉÖ´ÐÐÎļþ
- #-nolink£º²»Á´½Ó
- bud a.d -nolink # Éú³É a.o
- #-lib£ºÉú³É ¾²Ì¬¿â
- bud a.d -lib # Éú³É a.a ΪºÎ²»ÊÇliba.a?
- #-nolib: ²»Éú³É ¾²Ì¬¿â
- bud b.d -nolib # Éú³É b.o £¬¶ø²»ÊÇ b.a
LIZBOPTµÄ×÷Óò»´óÇå³þ£¬°ÑÔÎĵ͍ÒåÁгöÀ´°É£¬ÍµÀÁÁË
-LIBOPT
This allows you to pass one or more command line arguments to the librarian.
- Example: Set the page size to 32Kb
- -LIBOPT-p32
- Example: Embedded spaces enclosed in quotes.
- "-LIBOPT -l -i"
-LIBPATH
This allows you to add one or more paths to be searched for library files.
This might be used when you don't want to permanently update the standard search paths.
Example:
- -LIBPATH=c:\mylibs;d:\3rdparty;c:\lib\debuglibs
- BPATH=/usr/lib:/usr/local/lib:/usr/local/lib/mysql/
-PP ¾ÙÀý£º
°Ñb.d ÎļþÒÆ¶¯ / Ŀ¼Ï£¬ÓÃbud a.d ±àÒë¾Í»áÌáʾÕÒ²»µ½b.d£¬ok
- bud a.d -PP/ # ÌáʾÕÒ²»µ½ /b.o£¬ÒòΪ±àÒëµÄb.oÉú³ÉÔÚÁ˵±Ç°Ä¿Â¼£¬¶ø²»ÊǸùĿ¼
- bud a.d -PP/ -op # ·½°¸1£ºopÊÇdmdµÄ±àÒë²ÎÊý£¬±íʾÔÚÔ´ÎļþµÄ·¾¶ÏÂÉú³É.oÎļþ
- bud a.d -PP/ -odobj # ·½°¸2£º°Ñ.oÎļþ¶¼Êä³öµ½ obj Ŀ¼ÏÂ
dmdÃüÁîµÄ-L²ÎÊý£ºÖ¸¶¨
- -L Ö¸¶¨Ò»¸öÁ¬½Ó²ÎÊý£¬±ÈÈ磺
- -L-lpthread linuxÏÂÁ´½Ólibpthread.so
brfÎļþʹÓÃ˵Ã÷
brfÎļþ¾ÍÊǶ¨ÒåÁ˸÷ÖÖbudÃüÁî²ÎÊýµÄ¼¯ºÏ¡£
ÎļþÀ©Õ¹ÃûÊÇ£º.brf
¾ÙÀý£º
ÎļþÃû£ºfinal.brf
- # Éú³É·¢Ðа汾 # #·ûºÅÊÇbrfÎļþµÄ×¢ÊÍ·ûºÅ
- -T{Target}_release # Ó¦ÓóÌÐòµÄÃû×Ö
- -release # Don't generate runtime checks.
- -full # ÖØÐ±àÒëËùÓÐÎļþ
- -cleanup # ±àÒëÍê³ÉºóÇå³ýÖмäÎļþ
- -inline # ½øÐÐÄÚÁªÓÅ»¯
ÔËÐз½·¨£º
- bud a @final # ×¢Òâ@·ûºÅ
- bud a @final --inline
- # °ÑinlineÑ¡Ïî½ûÓã»Óо¯¸æ£¬²»ÖªµÀÔÒò;(
¿ÉÒÔ°ÑÔ´Îļþдµ½ brf ÎļþÖÐ
ÿÐÐÒ»¸ö±àÒë²ÎÊý£¬Ã»ÓÐ˳Ðò
¿ÉÒÔÓà -- Ñ¡Ï°ÑbrfÎļþÖеIJÎÊý½ûÓÃÁË
²»¿ÉÒÔÏñMakefileÎļþÒ»Ñù£¬¶¨Òå¶à¸ö±àÒëÄ¿±ê¡£¶¨Òå¶à¸öbrfÎļþ°É
budÃüÁîµÄĬÈÏbrfÎļþ½Ð build.brf£¬Èç¹ûҪʹÓÃĬÈϵÄbrf£¬Ôò¿ÉÒÔ²»ÓÃÖ¸¶¨ÎļþÃû£º
- bud @
¶à·Å¼¸¸öÀý×ÓÉÏÀ´£¬±¸Íü£º
À´×Ô£ºhttp://dlang.group.javaeye.com/group/topic/1072?page=6
- -cleanup ±àÒëºóÇåÀíµô.oÎļþ
- -L-lpthread linuxÏÂÁ´½Ólibpthread.so
- -LIBPATH=c:\db ÉèÖÿâÁ´½Ó·¾¶
- libdb45.lib Ö±½ÓÁ´½ÓwindowsÏÂʹÓõÄlibÎļþ
- -op .oÎļþÊä³öµ½Ô´ÎļþËùÔÚ·¾¶
- -odobjs °Ñ.oÎļþÊä³öµ½objsÎļþ¼Ð
- -T../bin/test ±àÒëµÄ¿ÉÖ´ÐÐÎļþÊä³ö·¾¶
# Ò»¸ö¼òµ¥µÄmake.brf Îļþ
- -cleanup
- -op
- -L-ldb
- -LIBPATH=/home/lijie/dm/lib:/home/lijie/dmd/lib:/usr/local/BerkeleyDB.4.5/lib
- src/test.d
- -T../bin/test
ÆäËûbud²ÎÊý
Èç¹ûûÓиø³ö¶¨Ò壬¾Í×Ô¼º¿´Îĵµ°É£¬ÎÒÒ²²»´óÀí½â ;)
- -DCPATH Ö¸¶¨±àÒëÆ÷µÄ°²×°Â·¾¶
- -CFPATH Ö¸¶¨DÅäÖÃÎļþµÄ·¾¶
- -BCFPATH Ö¸¶¨BudÅäÖÃÎļþµÄ·¾¶
- -RDF<file> Ö¸¶¨RDFÎļþ£¨Rule Definition File£©µÄ·¾¶
- -MDF<file> Ö¸¶¨MDFÎļþ£¨Macro Definition File£©µÄ·¾¶
- -nodef ²»´´½¨ MDF£¨Module Definition File£©Îļþ
- -explicit Ö»±àÒëÖ¸¶¨µÄÎļþ
- -usefinal
- -dll Èç¹ûÔ´ÎļþÓÐDllMain()º¯Êý£¬Ä¬ÈÏ»á±àÒë³ÉDll¿â£»...
- -gui Èç¹ûÔ´ÎļþÓÐWinMain()º¯Êý£¬Ä¬ÈÏ»á±àÒë³ÉGUI³ÌÐò£»...
- -help ÏÔʾ°ïÖú
- -AutoWinLibs(=<Yes/No>)
- -modules(=<name>)
- -UMB=<Yes/No>
- -R<option>
- -emptyargs
- -M<name>
- -X<name>
BudµÄ±àÒë°²×°
ÏÂÔØÔ´³ÌÐò
make -f Makefile.unix
./build build -full -op
ln -s build bud
ºó¼Ç£º
ÒòΪÎÒÖ»ÊÇÓÃDдд²âÊÔ³ÌÐò£¬ »ù±¾ÉϾÍ2¡¢3¸öÎļþ£¬×î¶àÓиöCµÄÁ´½Ó¿â¡£
ÎÒµÄÕâµãСÐèÇó£¬budÃüÁÊÇÄܺܺô¦ÀíµÄ¡£¸ü¸´ÔÓµÄÇé¿ö£¬ÎҾͲ»Á˽⡣
ÎÄÖÐÓÐЩ´íÎ󣬺Ͳ»¿Ï¶¨µÄµØ·½£¬µÈÎÒŪÃ÷°×ÁËÔÙÀ´ÐÞÕý°É¡£
°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿