好男人天堂网,久久精品国产这里是免费,国产精品成人一区二区,男人天堂网2021,男人的天堂在线观看,丁香六月综合激情

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > Build編譯工具學習筆記:常用命令參數和BRF文件

Build編譯工具學習筆記:常用命令參數和BRF文件
2010-01-13 22:51:53  作者:  來源:
build工具的主頁在:http://www.dsource.org/projects/build
它以前叫 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命令的格式是:

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

參數和源文件都沒有順序,可以任意排列 -- 喜歡把源文件放前面,編譯參數放后面,因為編譯參數經常改

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



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


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

給個例子:a.d 和 b.d
Java代碼 復制代碼
  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代碼 復制代碼
  1. module b;   
  2.   
  3. import std.stdio;   
  4.   
  5. void print_b()   
  6. {   
  7.     writefln("in Module B: b.d");   
  8. }  


最簡單的編譯方法:
Java代碼 復制代碼
  1. bud a.d   
  2. bud a                   # 可以不寫 .d 后綴  

注意,這里不需要指定 b.d,因為a.d中的import起了作用。
bud命令會自動處理。是不是很簡單?

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


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


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

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


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


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


use文件:
Java代碼 復制代碼
  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個標簽:[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的文件?

Java代碼 復制代碼
  1. -obj          只是創建 object文件(.o),不進行link和lib操作,等同于同時加 -nolink -nolib   
  2. -link         即使源文件中沒有main()函數,也強制進行連接。   
  3.                 main()函數一般在鏈接庫中,而不在要編譯的源代碼中   
  4. -nolink       針對有main()函數的源文件:不進行link操作,只生成 .o 文件   
  5. -lib          針對有main()函數的源文件:不進行link操作,只生成 .a 文件   
  6. -nolib        針對沒有main()函數的源文件:不進行lib操作,只生成 .o 文件   
  7. -allobj       不懂:(   
  8.   
  9. -LIBOPT       指定要連接的參數   
  10. -LIBPATH      指定鏈接庫的目錄   
  11. -PP           指定除當前路徑外的 其他源文件的搜索路徑  


舉例吧:

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


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

Java代碼 復制代碼
  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代碼 復制代碼
  1. -LIBPATH=c:\mylibs;d:\3rdparty;c:\lib\debuglibs   
  2. BPATH=/usr/lib:/usr/local/lib:/usr/local/lib/mysql/    


-PP 舉例:
把b.d 文件移動 / 目錄下,用bud a.d 編譯就會提示找不到b.d,ok
Java代碼 復制代碼
  1. bud a.d -PP/         # 提示找不到 /b.o,因為編譯的b.o生成在了當前目錄,而不是根目錄   
  2. bud a.d -PP/ -op     # 方案1:op是dmd的編譯參數,表示在源文件的路徑下生成.o文件   
  3. bud a.d -PP/ -odobj  # 方案2:把.o文件都輸出到 obj 目錄下  


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


brf文件使用說明

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

舉例:
文件名:final.brf
Java代碼 復制代碼
  1. # 生成發行版本        # #符號是brf文件的注釋符號   
  2. -T{Target}_release  # 應用程序的名字   
  3. -release            # Don't generate runtime checks.   
  4. -full               # 重新編譯所有文件   
  5. -cleanup            # 編譯完成后清除中間文件   
  6. -inline             # 進行內聯優化  


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


可以把源文件寫到 brf 文件中
每行一個編譯參數,沒有順序
可以用 -- 選項,把brf文件中的參數禁用了
不可以像Makefile文件一樣,定義多個編譯目標。定義多個brf文件吧

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


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

# 一個簡單的make.brf 文件
Java代碼 復制代碼
  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參數

如果沒有給出定義,就自己看文檔吧,我也不大理解 ;)
Java代碼 復制代碼
  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              不創建 MDF(Module Definition File)文件   
  9. -explicit           只編譯指定的文件   
  10. -usefinal              
  11.   
  12. -dll                如果源文件有DllMain()函數,默認會編譯成Dll庫;...   
  13. -gui                如果源文件有WinMain()函數,默認會編譯成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

后記:
因為我只是用D寫寫測試程序, 基本上就2、3個文件,最多有個C的鏈接庫。
我的這點小需求,bud命令還是能很好處理的。更復雜的情況,我就不了解。

文中有些錯誤,和不肯定的地方,等我弄明白了再來修正吧。

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
成人免费福利片在线观看| 黄色免费网站在线| 欧美大片一区| 国产麻豆精品免费密入口| 国产一级生活片| 91麻豆国产级在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产国产人免费视频成69堂| 精品视频在线看 | 亚洲精品中文字幕久久久久久| 国产不卡在线看| 精品久久久久久中文| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产伦精品一区三区视频| 91麻豆爱豆果冻天美星空| 欧美激情影院| 四虎影视库| 一级女性全黄生活片免费| 91麻豆精品国产高清在线| 午夜欧美福利| 欧美一级视频免费| 精品久久久久久中文字幕2017| 欧美大片a一级毛片视频| 日本免费看视频| 精品国产香蕉在线播出| 久久99中文字幕| 国产麻豆精品免费密入口| 超级乱淫黄漫画免费| 精品久久久久久中文| 四虎影视库国产精品一区| 日本免费区| 国产一区二区精品久| 国产精品自拍亚洲| 亚洲女人国产香蕉久久精品 | 四虎影视库国产精品一区| 国产a视频| 久久久久久久男人的天堂| 亚洲 国产精品 日韩| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人影院久久久久久影院| 成人高清免费| 日韩字幕在线| 精品视频免费在线| 国产视频在线免费观看| 国产成人精品一区二区视频| 欧美爱色| 国产伦久视频免费观看 视频| 九九精品影院| 国产不卡福利| 91麻豆精品国产综合久久久| 精品视频免费观看| 一级女性全黄生活片免费| 国产麻豆精品高清在线播放| 天天做人人爱夜夜爽2020| 一级毛片视频在线观看| 亚洲天堂免费| 精品视频在线观看免费| 欧美国产日韩在线| 国产成人女人在线视频观看| 欧美1卡一卡二卡三新区| 日韩欧美一二三区| 韩国毛片 免费| 黄色福利片| 国产麻豆精品| 你懂的日韩| 美女被草网站| 99热热久久| 黄色免费网站在线| 日日日夜夜操| 欧美一级视| 精品视频免费在线| 亚洲第一色在线| 久久精品欧美一区二区| 成人a级高清视频在线观看| 精品国产一区二区三区久| 日本特黄特色aaa大片免费| 欧美激情一区二区三区中文字幕| 国产一区二区福利久久| 麻豆网站在线看| 高清一级片| 人人干人人草| 99热精品在线| 国产伦久视频免费观看视频| 久久国产精品只做精品| 九九精品在线播放| 国产一区二区精品| 一级片免费在线观看视频| 国产成a人片在线观看视频| 成人免费观看网欧美片| 午夜在线亚洲| 国产福利免费视频| 999精品影视在线观看| 欧美1卡一卡二卡三新区| 国产成人女人在线视频观看| 午夜在线影院| 日本免费区| 国产综合91天堂亚洲国产| 黄色福利片| 国产综合91天堂亚洲国产| 99色视频在线| 精品在线视频播放| 日韩在线观看视频免费| 国产不卡在线观看| 沈樵在线观看福利| 国产麻豆精品免费密入口| 中文字幕Aⅴ资源网| 成人免费高清视频| 四虎影视库国产精品一区| 日本在线www| 精品视频在线看 | 天堂网中文字幕| 精品国产一区二区三区精东影业| 免费国产在线视频| 麻豆系列 在线视频| 精品视频免费观看| 国产美女在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本伦理黄色大片在线观看网站| 欧美激情影院| 亚欧成人毛片一区二区三区四区| 99热热久久| 国产亚洲精品aaa大片| 亚久久伊人精品青青草原2020| 可以免费看毛片的网站| 欧美爱爱动态| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日日日夜夜操| 国产精品免费久久| a级黄色毛片免费播放视频| 午夜在线影院| 欧美国产日韩精品| 99久久精品费精品国产一区二区| 黄视频网站免费看| 免费国产在线视频| 日韩免费在线视频| 麻豆午夜视频| 四虎影视精品永久免费网站| 欧美激情伊人| 久草免费在线色站| 日韩中文字幕在线亚洲一区| 成人免费网站久久久| 欧美大片a一级毛片视频| 成人免费网站久久久| 欧美激情一区二区三区在线| 成人高清视频在线观看| 美女免费毛片| 午夜精品国产自在现线拍| 日韩专区一区| 日韩欧美一及在线播放| 毛片高清| 国产一区二区精品久久91| 99久久网站| 欧美日本免费| 日韩一级黄色片| 精品国产一区二区三区久久久蜜臀 | 日本伦理网站| 青青青草影院| 欧美另类videosbestsex久久| 欧美激情一区二区三区中文字幕| 国产美女在线一区二区三区| 黄色短视屏| 国产一区二区高清视频| 欧美另类videosbestsex视频 | 四虎久久精品国产| 国产麻豆精品高清在线播放| 亚洲天堂在线播放| 九九干| 成人免费观看网欧美片| 麻豆午夜视频| 999精品影视在线观看| 欧美爱爱动态| 一级毛片视频在线观看| 一级毛片视频免费| 国产精品自拍亚洲| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 99久久精品国产高清一区二区 | 青青青草影院 | 日韩av成人| 九九精品久久久久久久久| 台湾美女古装一级毛片| 欧美激情伊人| 久久国产一久久高清| 国产精品自拍一区| 欧美日本韩国| 久久久久久久免费视频| 精品国产一区二区三区久久久狼 | 日本在线不卡视频| 国产精品免费久久| 国产一区二区精品| 香蕉视频三级| 麻豆网站在线看| 欧美a级成人淫片免费看| 国产高清在线精品一区二区| 精品视频在线观看视频免费视频 | 国产网站麻豆精品视频| 国产精品免费久久| 天天做人人爱夜夜爽2020毛片| 久久久久久久男人的天堂| 欧美激情一区二区三区视频 | 毛片的网站|