Buildコンパイルツール学習ノート:共通コマンドパラメータとBRFファイル


ビルドツールのホームページは次のとおりです.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コマンドのフォーマットは次のとおりです.

build <sourcefile> [<switches> ] [<otherfiles> ]
sourcefile        main      
switches            
otherfiles      ,object  ,           (  :))

パラメータもソースファイルも順番がなくて、任意に並べることができます--ソースファイルを前に置くのが好きで、コンパイルパラメータを後ろに置くのが好きです.コンパイルパラメータはよく変更されるからです.
Budの共通パラメータの1つ:一般オプション

-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パラメータを指定できます[注:当てて、肯定しません]
コマンドパラメータが横線(-)の場合は有効、横線が2つの場合は無効です.
例えば、bud--cleanup-full
2つの横線(-)は一般的にbrfファイルと組み合わせて使用され、brfファイルのコンパイルパラメータを無効にすることを示します.
例をあげます: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   

ここでは、a.dのimportが機能するため、b.dを指定する必要はありません.
budコマンドは自動的に処理されます.簡単じゃないの?
コンパイル後に実行します.

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

[USES]と[USEDBY]の2つのラベルが表示されます.
[USES]Aファイルで使用されているファイルの意味
[USEDBY]の意味は、どのファイルAファイルが使用されているか
各行のファイル名の間を<>で分割
昇順配列
Budの共通パラメータの2:コンパイルオプション
[注:コンパイラの用語がはっきりしていないと、表現がはっきりしないことがあります.コンパイル用語を後で検討して、この部分を修正します]
コンパイルプロセスは一般的に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()関数のあるソースプログラムを実行可能ファイルにコンパイルします.
この2つの関数がない場合は、リンクライブラリファイル(.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
	-LIBPATH=/usr/lib:/usr/local/lib:/usr/local/lib/mysql/  

-Pの例:
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ファイルに書き込むことができます
各行に1つのコンパイルパラメータがあり、順序がありません.
brfファイルのパラメータを無効にするには--オプションを使用します.
Makefileファイルのように複数のコンパイル先を定義することはできません.複数のbrfファイルを定義しましょう
budコマンドのデフォルトbrfファイルはbuild.brfと呼ばれ、デフォルトのbrfを使用する場合は、ファイル名を指定する必要はありません.

bud @

いくつかの例を多く置いて、メモしてください.
ソース:http://dlang.group.iteye.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コマンドがうまく処理できます.もっと複雑な状況では、私は知りません.
文の中には間違いや不確実なところがあるので、私が理解してから修正しましょう.