Boost.Build @ AIX + IBM XL C/C++ (vacpp)

既に id:Cryolite 先生が http://d.hatena.ne.jp/Cryolite/20110901#p1 でやっているように、Boost.Build において、各ターゲットの種類に対してビルドプロパティの値が具体的にどのようなコマンドラインオプションに対応するかを、AIX + IBM XL C/C++ (vacpp) の場合において図示するという、やはり、私以外の誰も得をしないし、そもそも他に理解できる人が居るのかすら怪しい表を私も作ってみることにしました。

id:Cryolite 先生の表自体は私がとても便利に使わせていただきました。ありがとうございます。

基本的な見方は http://d.hatena.ne.jp/Cryolite/20110901#p1 の場合と一緒で、基本コマンド + 各ビルドプロパティに対応するオプション が実際に走るコマンドになります。
こんな表を作っておいてなんですが、$BOOST_ROOT/tools/build/v2/tools/vacpp.jam は比較的読みやすいのでわざわざこの表を参照しなくても……。

vacpp の場合、<threading> プロパティによって使うコマンドが変わります。

基本コマンド
featurevalueobj(C++)obj(C)lib (built shared)lib (built static)exerun
threadingsinglexlC -qcpluscmt -qfuncsect -c -o "target" "source"xlc -qcpluscmt -c -o "target" "source"xlC_r -G -o "target" "sources"ar ru "target" "sources"xlC -o "target" "sources"
multixlC_r -qcpluscmt -qfuncsect -c -o "target" "source"xlc_r -qcpluscmt -c -o "target" "source"xlC_r -o "target" "sources"
オプション
featurevalueobj(C++)obj(C)lib (built shared)lib (built static)exerun
linkshared-bnoipathN/A-brtl -bnoipath
staticN/A
runtime-linkshared
static
runtime-debuggingon
off
optimizationoff-qNOOPTimize
speed-O3 -qstrict
space-O2 -qcompact
profilingoff
on-pg-pg-pg
inlining (not recommended)off-qnoinline
on-qinline
full
rttion-qrtti
off-qnortti
exception-hadnlingon-qeh
off-qnoeh
asynch-exceptionson
off
extern-c-nothrowon
off
debug-symbolson-g -qfullpath-g -qfullpath-g -qfullpath
off-s-s
stripon
off
definevalue-Dvalue
undefvalue-Uvalue
includepath-I"path"
sysincludepath-I"path"
cflagsvaluevalue
cxxflagsvaluevalue
fflagsvalue
asmflagsvalue
linkflagsvaluevaluevalue
arflagsvaluevalue
versionvalue
flagsvalue
location-prefixvalue
usetarget
dependencytarget
implicit-dependencytarget
warningsall
on
off
warnings-as-errorson
off
c++-template-depthn
sourcetarget
librarytarget
filetarget
find-shared-libraryvalue-lvalue-lvalue
find-static-libraryvalue-lvalue-lvalue
library-pathpath-Lpath-Lpath
namevalue
tagvalue
searchpath
locationpath
dll-pathpathLIBPATH 環境変数 (LD_LIBRARY_PATH に相当) に path を追加
hardcode-dll-pathstrue*意味無し*
false
xdll-pathpath*意味無し*LIBPATH 環境変数 (LD_LIBRARY_PATH に相当) に path を追加
def-filetarget
suppress-import-libtrue
false
allowvalue
address-model 
32
64-q64-q64-X 64
c++abi
contditionalvalue
buildyes
no
user-interfaceconsole
gui
wince
native
auto

注意事項

ライブラリ検索パスの埋め込み

通常 Boost.Build は プログラムにライブラリ検索パスを埋め込みますが*1AIX の場合はライブラリ検索の挙動が Linux などとは異なるため、bjam ではパスの埋め込みを行わないようです。
AIX の linker には GNU linker の -lrpath/-lrpath-link オプションと一見よく似た -blibpath オプションが存在します。しかし、このオプション指定した場合 LIBPATH (LD_LIBRARY_PATH に相当する) やシステムのデフォルトのライブラリ検索パスが無視され、-blibpath で指定したパスのみから探索が行なわれることになるようです(あってる?)。そのため、生成された実行ファイルをインストールせずに直接実行した場合は依存するライブラリが見付からず実行に失敗します。run rule から実行するか、自分で LIBPATH 環境変数を適切に設定してください。
(この記事作った理由はこれが言いたいだけだったり)

*1:install rule では <hardcode-dll-paths> feature が明示的に false にされているため埋め込みは起こりません。