麻豆传媒视频在线,国产91精品不卡视频,欧美jizz19性欧美,污视频网站在线观看,91涩漫在线观看,伊人发布在线,九色porny丨首页在线,福利视频一区,久久av网址,久久人人视频

當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > Build編譯工具學(xué)習(xí)筆記:常用命令參數(shù)和BRF文件

Build編譯工具學(xué)習(xí)筆記:常用命令參數(shù)和BRF文件
2010-01-13 22:51:53  作者:  來(lái)源:
build工具的主頁(yè)在:http://www.dsource.org/projects/build
它以前叫 bud,所以這里混用 bud 和build,都指的同一個(gè)東西

build是D語(yǔ)言的編譯工具,相當(dāng)于C的make命令。
但它更簡(jiǎn)單且好用,因?yàn)樗芴幚?import 語(yǔ)句,自動(dòng)載入依賴(lài)的文件。
看過(guò)本文后,基本上可以使用了。
如果你想用它的高級(jí)功能,當(dāng)然還得花時(shí)間去研究它。

build 會(huì)涉及的文件有:
  brf文件 (Build Response File) -- bud命令的參數(shù)文件
  源文件的 Pragmas 指令
  rdf文件 (Rule Definition File) -- 規(guī)則定義文件
  mdf文件 (Macro Definition File) -- 宏定義文件
  cfg文件 (Configuration File) -- 配置文件
  pfl文件 (Profile File) -- 配置文件?

其中,brf文件里面寫(xiě)的就是一些build命令的參數(shù),所以,先從參數(shù)開(kāi)始。

先看幾個(gè)簡(jiǎn)單參數(shù),然后再說(shuō)說(shuō)brf文件,最后把其他參數(shù)簡(jiǎn)單的列一下。
[注:以下在Linux和dmd下測(cè)試過(guò),沒(méi)有測(cè)試win和gdc]

build命令的格式是:

Java代碼 復(fù)制代碼
  1. build <sourcefile> [<switches> ] [<otherfiles> ]   
  2. sourcefile   一般是包括main函數(shù)的源文件   
  3. switches     上面列出的參數(shù)   
  4. otherfiles   鏈接庫(kù),object文件,宏定義文件等等其他文件(猜的:))  

參數(shù)和源文件都沒(méi)有順序,可以任意排列 -- 喜歡把源文件放前面,編譯參數(shù)放后面,因?yàn)榫幾g參數(shù)經(jīng)常改

Bud的常用參數(shù)之一:常規(guī)選項(xiàng)
Java代碼 復(fù)制代碼
  1. -exec           編譯成功后,運(yùn)行它   
  2. -cleanup        在編譯完成后,把生成的中間文件刪除掉,比如 .o 文件   
  3. -full           編譯所有的文件,即使沒(méi)有修改也要編譯一遍   
  4. -T<name>          指定目標(biāo)的文件名   
  5. -od<path>         指定.o 等臨時(shí)文件的輸出目錄   
  6.   
  7. -silent         安靜模式,不輸出多余信息   
  8. -test           只是顯示要調(diào)用的命令,不實(shí)際編譯   
  9. -v              build 和 dmd 都是調(diào)試模式   
  10. -V              build 是調(diào)試模式,但dmd命令不是   
  11. -info           顯示build命令的版本號(hào)等信息   
  12. -names          顯示要編譯的文件名   
  13. -uses[=fname]   輸出交叉引用文件              



如果不是bud的參數(shù),會(huì)傳遞給dmd。比如可以指定 -op -L-l 參數(shù) [注:猜的,不肯定]


命令參數(shù)如果是一個(gè)橫線(xiàn)(-),表示啟用,如果是兩個(gè)橫線(xiàn)(--),表明禁用。
比如: bud --cleanup -full
兩個(gè)橫線(xiàn)(--)一般和brf文件配合使用,表明要禁用brf文件中的某個(gè)編譯參數(shù)

給個(gè)例子:a.d 和 b.d
Java代碼 復(fù)制代碼
  1. module a;   
  2.   
  3. import b;   
  4. import std.stdio;   
  5.   
  6. void main(char[][] arg)   
  7. {   
  8.     writef("in Module A: ");   
  9.     writefln(arg);   
  10.     print_b();   
  11. }  

Java代碼 復(fù)制代碼
  1. module b;   
  2.   
  3. import std.stdio;   
  4.   
  5. void print_b()   
  6. {   
  7.     writefln("in Module B: b.d");   
  8. }  


最簡(jiǎn)單的編譯方法:
Java代碼 復(fù)制代碼
  1. bud a.d   
  2. bud a                   # 可以不寫(xiě) .d 后綴  

注意,這里不需要指定 b.d,因?yàn)閍.d中的import起了作用。
bud命令會(huì)自動(dòng)處理。是不是很簡(jiǎn)單?

編譯后讓它運(yùn)行:
Java代碼 復(fù)制代碼
  1. bud a.d -exec   
  2. bud a.d -execXXX        # 給個(gè)參數(shù)XXX   
  3. bud a.d -exec"XXX YYY"  # 給2個(gè)參數(shù)XXX YYY  ; 在bash下不能正確運(yùn)行,不知道怎么處理  


改個(gè)名字:
Java代碼 復(fù)制代碼
  1. bud a.d -Ta.out          # 文件名是:a.out   ;在命令行下,生成不了a.out,不知道怎么處理;(   
  2. bud a.d -Ttest_{Target}  # 文件名是:test_a  


如果你不修改a.d或者b.d,多次運(yùn)行上面的命令,會(huì)提示:
Java代碼 復(fù)制代碼
  1. Files are up to date, no build required.  

這個(gè)和make的原理一樣,如果你想每次都編譯,可以這么辦:
Java代碼 復(fù)制代碼
  1. bud a.d -full  


如果看著那么多的.o文件不爽,就把它刪掉:
Java代碼 復(fù)制代碼
  1. bud a.d -clean      # -clean 是-cleanup的別名  


幾個(gè)調(diào)試選項(xiàng):
Java代碼 復(fù)制代碼
  1. bud a.d -names      # 顯示要編譯的文件名   
  2. bud a.d -test       # 顯示dmd和gcc的調(diào)用命令   
  3. bud .ad -uses=x     # 生成交叉引用文件,默認(rèn)文件名是a.use,這里指定為x   
  4. bud a.d -v          # 除了bud的調(diào)試信息,還顯示dmd編譯器的調(diào)試信息   
  5. bud a.d -V          # 只顯示bud的調(diào)試信息  


use文件:
Java代碼 復(fù)制代碼
  1. [USES]   
  2. a.d <> /usr/local/src/phobos/std/stdio.d   
  3. a.d <> b.d    
  4. b.d <> /usr/local/src/phobos/std/stdio.d   
  5. [USEDBY]   
  6. /usr/local/src/phobos/std/stdio.d <> a.d    
  7. /usr/local/src/phobos/std/stdio.d <> b.d    
  8. b.d <> a.d  

可以看到,有2個(gè)標(biāo)簽:[USES] 和[USEDBY]
[USES]  的含義是 A 文件使用了哪些文件
[USEDBY] 的含義是 哪些 文件 別 A文件 使用了
每行的文件名之間用 <> 分割
升序排列

Bud的常用參數(shù)之二:編譯選項(xiàng)
[注:對(duì)編譯器的術(shù)語(yǔ)不是很清楚,會(huì)有些表達(dá)不清楚;仡^研究一下編譯術(shù)語(yǔ),再來(lái)修改這段】
編譯過(guò)程一般是 a.d (源文件)  -> a.o (object文件) -> a.exe (可執(zhí)行文件),這里不討論預(yù)處理等過(guò)程
object文件還可以編譯成 靜態(tài)鏈接庫(kù)(liba.a) 或者 動(dòng)態(tài)鏈接庫(kù)(liba.so)

a.d 到 a.o 的過(guò)程叫編譯 過(guò)程
a.o 到 a.exe 的過(guò)程叫 連接過(guò)程(link)
a.o 到 liba.a/so 的過(guò)程叫 lib過(guò)程      [注:實(shí)在不知道怎么翻譯;( ]

bud 默認(rèn)會(huì)把有main()或者Winmain()函數(shù)的源程序編譯成可執(zhí)行文件;
如果沒(méi)有這兩個(gè)函數(shù),則會(huì)被編譯成鏈接庫(kù)文件(.a)
下面這些選項(xiàng)可以改變這些行為:
不知道怎么生成 .so的文件?

Java代碼 復(fù)制代碼
  1. -obj          只是創(chuàng)建 object文件(.o),不進(jìn)行l(wèi)ink和lib操作,等同于同時(shí)加 -nolink -nolib   
  2. -link         即使源文件中沒(méi)有main()函數(shù),也強(qiáng)制進(jìn)行連接。   
  3.                 main()函數(shù)一般在鏈接庫(kù)中,而不在要編譯的源代碼中   
  4. -nolink       針對(duì)有main()函數(shù)的源文件:不進(jìn)行l(wèi)ink操作,只生成 .o 文件   
  5. -lib          針對(duì)有main()函數(shù)的源文件:不進(jìn)行l(wèi)ink操作,只生成 .a 文件   
  6. -nolib        針對(duì)沒(méi)有main()函數(shù)的源文件:不進(jìn)行l(wèi)ib操作,只生成 .o 文件   
  7. -allobj       不懂:(   
  8.   
  9. -LIBOPT       指定要連接的參數(shù)   
  10. -LIBPATH      指定鏈接庫(kù)的目錄   
  11. -PP           指定除當(dāng)前路徑外的 其他源文件的搜索路徑  


舉例吧:

Java代碼 復(fù)制代碼
  1. #-obj:只生成.o 文件   
  2. bud a.d -obj         # 會(huì)同時(shí)生成 a.o b.o   
  3. bud b.d -obj         # 生成 b.o,不會(huì)生成 a.o ;)   
  4.   
  5. #-link:強(qiáng)制連接   
  6. bud a.d -obj         # 生成 a.o   
  7. bud b.d a.o          # 生成 b 可執(zhí)行文件   
  8.   
  9. #-nolink:不鏈接   
  10. bud a.d -nolink      # 生成 a.o   
  11.   
  12. #-lib:生成 靜態(tài)庫(kù)   
  13. bud a.d -lib         # 生成 a.a 為何不是liba.a?   
  14.   
  15. #-nolib: 不生成 靜態(tài)庫(kù)   
  16. bud b.d -nolib       # 生成 b.o ,而不是 b.a  


LIZBOPT的作用不大清楚,把原文的定義列出來(lái)吧,偷懶了
-LIBOPT
This allows you to pass one or more command line arguments to the librarian.

Java代碼 復(fù)制代碼
  1. Example: Set the page size to 32Kb   
  2.     -LIBOPT-p32   
  3. Example: Embedded spaces enclosed in quotes.   
  4.     "-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:
Java代碼 復(fù)制代碼
  1. -LIBPATH=c:\mylibs;d:\3rdparty;c:\lib\debuglibs   
  2. BPATH=/usr/lib:/usr/local/lib:/usr/local/lib/mysql/    


-PP 舉例:
把b.d 文件移動(dòng) / 目錄下,用bud a.d 編譯就會(huì)提示找不到b.d,ok
Java代碼 復(fù)制代碼
  1. bud a.d -PP/         # 提示找不到 /b.o,因?yàn)榫幾g的b.o生成在了當(dāng)前目錄,而不是根目錄   
  2. bud a.d -PP/ -op     # 方案1:op是dmd的編譯參數(shù),表示在源文件的路徑下生成.o文件   
  3. bud a.d -PP/ -odobj  # 方案2:把.o文件都輸出到 obj 目錄下  


dmd命令的-L參數(shù):指定
Java代碼 復(fù)制代碼
  1. -L                  指定一個(gè)連接參數(shù),比如:   
  2.                         -L-lpthread  linux下鏈接libpthread.so  


brf文件使用說(shuō)明

brf文件就是定義了各種bud命令參數(shù)的集合。
文件擴(kuò)展名是:.brf

舉例:
文件名:final.brf
Java代碼 復(fù)制代碼
  1. # 生成發(fā)行版本        # #符號(hào)是brf文件的注釋符號(hào)   
  2. -T{Target}_release  # 應(yīng)用程序的名字   
  3. -release            # Don't generate runtime checks.   
  4. -full               # 重新編譯所有文件   
  5. -cleanup            # 編譯完成后清除中間文件   
  6. -inline             # 進(jìn)行內(nèi)聯(lián)優(yōu)化  


運(yùn)行方法:
Java代碼 復(fù)制代碼
  1. bud a @final        # 注意@符號(hào)   
  2. bud a @final --inline      
  3.                     # 把inline選項(xiàng)禁用;有警告,不知道原因;(  


可以把源文件寫(xiě)到 brf 文件中
每行一個(gè)編譯參數(shù),沒(méi)有順序
可以用 -- 選項(xiàng),把brf文件中的參數(shù)禁用了
不可以像Makefile文件一樣,定義多個(gè)編譯目標(biāo)。定義多個(gè)brf文件吧

bud命令的默認(rèn)brf文件叫 build.brf,如果要使用默認(rèn)的brf,則可以不用指定文件名:
Java代碼 復(fù)制代碼
  1. bud @  


多放幾個(gè)例子上來(lái),備忘:
來(lái)自:http://dlang.group.javaeye.com/group/topic/1072?page=6
Java代碼 復(fù)制代碼
  1. -cleanup            編譯后清理掉.o文件     
  2. -L-lpthread         linux下鏈接libpthread.so     
  3. -LIBPATH=c:\db      設(shè)置庫(kù)鏈接路徑     
  4. libdb45.lib         直接鏈接windows下使用的lib文件     
  5. -op                 .o文件輸出到源文件所在路徑     
  6. -odobjs             把.o文件輸出到objs文件夾     
  7. -T../bin/test 編譯的可執(zhí)行文件輸出路徑    

# 一個(gè)簡(jiǎn)單的make.brf 文件
Java代碼 復(fù)制代碼
  1. -cleanup     
  2. -op     
  3. -L-ldb     
  4. -LIBPATH=/home/lijie/dm/lib:/home/lijie/dmd/lib:/usr/local/BerkeleyDB.4.5/lib     
  5. src/test.d     
  6. -T../bin/test    


其他bud參數(shù)

如果沒(méi)有給出定義,就自己看文檔吧,我也不大理解 ;)
Java代碼 復(fù)制代碼
  1. -DCPATH             指定編譯器的安裝路徑   
  2. -CFPATH             指定D配置文件的路徑   
  3. -BCFPATH            指定Bud配置文件的路徑   
  4.   
  5. -RDF<file>            指定RDF文件(Rule Definition File)的路徑   
  6. -MDF<file>            指定MDF文件(Macro Definition File)的路徑   
  7.   
  8. -nodef              不創(chuàng)建 MDF(Module Definition File)文件   
  9. -explicit           只編譯指定的文件   
  10. -usefinal              
  11.   
  12. -dll                如果源文件有DllMain()函數(shù),默認(rèn)會(huì)編譯成Dll庫(kù);...   
  13. -gui                如果源文件有WinMain()函數(shù),默認(rèn)會(huì)編譯成GUI程序;...   
  14.   
  15. -help               顯示幫助   
  16.   
  17. -AutoWinLibs(=<Yes/No>)   
  18. -modules(=<name>)   
  19. -UMB=<Yes/No>   
  20. -R<option>   
  21. -emptyargs             
  22.   
  23. -M<name>   
  24. -X<name>  


Bud的編譯安裝
下載源程序
make -f Makefile.unix
./build build -full -op
ln -s build bud

后記:
因?yàn)槲抑皇怯肈寫(xiě)寫(xiě)測(cè)試程序, 基本上就2、3個(gè)文件,最多有個(gè)C的鏈接庫(kù)。
我的這點(diǎn)小需求,bud命令還是能很好處理的。更復(fù)雜的情況,我就不了解。

文中有些錯(cuò)誤,和不肯定的地方,等我弄明白了再來(lái)修正吧。

安徽新華電腦學(xué)校專(zhuān)業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線(xiàn)咨詢(xún)
91久久精品国产91性色tv| 91麻豆精品国产综合久久久| 欧美magnet| 欧美国产专区| 亚洲欧洲日韩在线| 在线中文字幕日韩| 岛国视频免费在线观看| 蜜桃成人av| 久久精品视频在线免费观看| 亚洲欧美日韩久久久久久| 四虎国产精品永远| 91精品啪在线观看国产手机| 不卡一区中文字幕| 亚洲人成电影在线播放| 黄色av免费在线看| 欧美激情另类| 午夜视频一区二区| 国产精品久久网| 日韩在线视频一区二区三区 | 亚洲高清不卡在线观看| 欧美黑人狂野猛交老妇| 国产理论电影在线| 免费在线欧美黄色| 欧美视频一区二区| 国产精品99久久99久久久二8| 日韩欧美另类一区二区| 韩国v欧美v日本v亚洲v| 亚洲激情自拍图| av女优在线| 亚洲黄色在线| 国内外成人在线视频| 亚洲国产精品免费| 男人的天堂在线视频免费观看| 欧美激情 亚洲a∨综合| 色狠狠色狠狠综合| 国产超碰在线| 久久久国产精品| 欧美最猛黑人xxxxx猛交| 在线免费视频福利| 欧美ab在线视频| 欧美精品在线观看播放| 色哟哟在线观看| 精品动漫av| 3atv在线一区二区三区| 国产在线一二三| 国产精品亚洲综合色区韩国| 日韩精品一区二区三区中文不卡 | 黄色免费在线看| 免费一区视频| av电影在线观看完整版一区二区| 欧美日韩精品国产| 欧美男男video| 欧美xnxx| 一本色道久久综合狠狠躁的番外| 日韩一区二区久久| 成人午夜在线影视| 亚洲成人一区在线观看| 亚洲国产人成综合网站| 一本一道波多野毛片中文在线| 国产高清久久久久| 欧美精品福利在线| 久久免费视频66| 久久久免费电影| 亚洲美女视频在线观看| 中文在线日韩| 国产精品视频白浆免费视频| 天堂一区二区在线| 国产三级视频在线看| 7777精品伊人久久久大香线蕉| 日韩在线免费| 欧美一区二区三区思思人| 国产亚洲在线观看| 成人在线视频免费看| 欧美人与性动交a欧美精品| 欧美一级国产精品| 日本免费新一区视频| 亚州欧美在线| 欧美精品一区二区三区涩爱蜜| 国产午夜精品美女毛片视频| 免费毛片在线看片免费丝瓜视频 | 一道本一区二区三区| 欧美孕妇与黑人孕交| 自拍偷拍亚洲综合| 女同一区二区三区| 68精品国产免费久久久久久婷婷| 国产剧情在线观看一区二区| 国产拍在线视频| 在线观看国产麻豆| 久久夜色精品国产| 亚洲一区二区在线免费看| 在线一区免费| 四虎影视国产在线视频| 欧美日韩国产首页在线观看| 国产视频在线观看一区二区三区| 怕怕欧美视频免费大全| 黄色一级片在线观看| 欧美日韩日日骚| 久久成人久久鬼色| 日韩中出av| 国产国产国产国产国产国产| 韩国av一区二区三区在线观看| 黄网在线免费| 日本高清免费不卡视频| 亚洲欧美校园春色| 日本亚洲欧美成人| 久久理论电影网| 超碰一区二区| 亚洲最新av网址| 蜜臀久久99精品久久久久久9| 成人在线免费电影| 91.com视频| 亚洲欧洲午夜| 黄色av网站在线免费观看| 欧美无人高清视频在线观看| 久久久一本精品| 中文字幕久热精品视频在线| 六月丁香综合在线视频| 老司机精品视频在线观看6| 91精选在线观看| 一本久道综合久久精品| 成年在线电影| 欧美一卡2卡三卡4卡5免费| 亚洲精品看片| 欧美日韩在线资源| 亚洲成色777777在线观看影院| 久久国产精品久久久久久电车| av大片在线看| 亚洲国产成人精品久久| 蜜桃视频一区二区三区| 草草视频在线观看| 久久激情视频免费观看| 91啦中文在线观看| 色悠久久久久综合先锋影音下载| 欧美中文字幕视频| 亚洲精品乱码久久久久久| 久9久9色综合| h短视频大全在线观看| 欧美日韩一二三区| 羞羞答答国产精品www一本| 怡红院av在线| 色婷婷综合久久久久| 久久综合九色综合97婷婷女人| 国产高清亚洲| 国产精品国产三级国产aⅴ9色| 亚洲精品v日韩精品| 国产欧美久久一区二区三区| 一二三四社区在线视频| 欧美精品tushy高清| 日韩午夜黄色| 白浆在线视频| 欧美精品电影在线| 亚洲日本在线视频观看| 日韩欧美字幕| 日韩av视屏| 精品日韩99亚洲| 国产在线精品免费av| 日本一级理论片在线大全| 欧美成年人视频网站| 国产精品午夜春色av| 九九精品久久| 污网站在线看| 在线综合+亚洲+欧美中文字幕| 国产视频一区三区| 丁香花视频在线观看| 欧美日韩不卡合集视频| 亚洲欧洲性图库| 欧美精品三区| 特级毛片在线| 久久久视频精品| 亚洲va韩国va欧美va| 国产精品99久久久久久动医院| 香蕉视频在线免费看| 日韩在线精品一区| 亚洲视频一区在线观看| 国产一区二区三区电影在线观看 | 久久精品99无色码中文字幕| 成人蜜臀av电影| 91亚洲精品视频在线观看| 最近最新mv在线观看免费高清| 日韩一区二区三区四区五区六区 | 在线性视频日韩欧美| 中文字幕精品一区二区三区精品| 成人黄色小视频| 日本亚洲精品| 97精品视频在线播放| 福利二区91精品bt7086| 久热成人在线视频| 99久久免费精品高清特色大片| 中文字幕成人在线观看| 欧美高清在线精品一区| 国产99久久久精品| 欧美日韩一区国产| 亚洲理论在线观看| 亚洲精品综合精品自拍| 94色蜜桃网一区二区三区| heyzo一区| 国产精品嫩草视频| 欧美综合在线视频| 岛国一区二区三区| 久久网站免费观看|