メモ

プログラムを書いているときに詰まった部分などを備忘録的に書いていきます。

FASTBuild事始め

FASTBuildとはVisualC++で使えるIncrediBuild、distccのようなフリー(というかオープンソース)の分散ビルドツールです。
VisualStudioのプロジェクトも作成できるのでCMakeにも近いかも。 そんなFASTBuildですが日本語で解説しているページを見かけないのでやったことを書いてみることにしました。

FASTBuild自体を以下のページから落としてきます。
FASTBuild - High-Performance Build System
中にFBuild.exeとFBuildWorker.exeにLICENSE.TXTが入っています。
FBuild.exe、FBuildWorker.exeをパスの通るところにおいてください。

こいつでBuildするには定義ファイルを書かないといけないので分散ビルドの前に単純なビルドができるようなシンプルな定義ファイルを書きます。
ちなみに64ビットでの例なので32ビットでやりたい場合はコンパイラのパスを適宜修正してください。
またVCのパスは適宜自分の環境にあったものにしてください。

.VCBasePath = 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC'
.Compiler          = "$VCBasePath$\bin\amd64\cl.exe"
.Librarian         = "$VCBasePath$\bin\amd64\lib.exe"
.Linker            = "$VCBasePath$\bin\amd64\link.exe"

; ソースフォルダ、ファイルをここで指定
ObjectList( "hallo_obj" )
{
  .CompilerOptions = '%1 /Fo%2 /nologo /c'
  .CompilerInputPath = "src\"
  .CompilerOutputPath= "obj\"
}

; 実行ファイル定義
Executable( "hallo" )
{
  .LinkerOptions = '/NOLOGO /OUT:%2 %1 /MACHINE:x64 /SUBSYSTEM:CONSOLE'
  .Libraries = { "hallo_obj" }
  .LinkerOutput = "bin/hallo.exe"
}

; 引数省略時に実行される処理
Alias( "all" )
{
  .Targets = { "hallo" }
}

事前にsrcフォルダ、objフォルダが入っているフォルダを用意します。
そこに上記の内容をテキストファイルに書き、fbuild.bffとして保存します。
srcフォルダにはコンパイルしたいソースを入れてください。
以下のような感じです。
・作業フォルダ(自分で作成)
  ┣ srcフォルダ(この中にソースを入れる)
  ┣ objフォルダ
  ┗ fbuild.bffファイル
コマンドプロンプトを開き、上記の作業フォルダに移動

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x64 

と入力してください(ダブルクォーテーション含む)
次に

fbuild 

と打ち込むことでビルドが始まります。

注意点として、FASTBuildのSampleを見てみるとLibrary( 'libA' )を使ってますが
これだとlibA.libができてさらにそれをリンクした実行バイナリができてしまいます。
単純な実行バイナリを作りたい場合は上記のObjectListを使います。