何年にもわたってmakeを使用した後、プロジェクトでjam(実際にはftjam)を使い始めました。
プロジェクトワークスペースには、次の2つのディレクトリがあります。
src
実行可能ファイルとライブラリを構築する場所test
私のテストプログラムはどこにありますか
テストプログラムへの依存関係を設定して、コンパイルするたびにライブラリも再コンパイルされるようにしようとしています(必要な場合)。
それを行う方法について何か提案はありますか?
何年にもわたってmakeを使用した後、プロジェクトでjam(実際にはftjam)を使い始めました。
プロジェクトワークスペースには、次の2つのディレクトリがあります。
src
実行可能ファイルとライブラリを構築する場所test
私のテストプログラムはどこにありますかテストプログラムへの依存関係を設定して、コンパイルするたびにライブラリも再コンパイルされるようにしようとしています(必要な場合)。
それを行う方法について何か提案はありますか?
わかりました、これは私が思ったほど簡単な質問ではないようですので、私は自分で解決策を考え出しました. スクリプトを使用して最終結果を達成するため、Jam の第一人者が Jam のみのソリューションを提供してくれることを願っています。
共通の定義を使用して、プロジェクトのルート ディレクトリに Jamrules を作成します。
プロジェクトのルート ディレクトリに、次の内容の Jamfile を作成します。
サブディレクトリ。; サブインクルード . ソース; サブインクルード . テスト ;
サブディレクトリ..src; ライブラリ mylib : mylib.c ;
サブディレクトリ..テスト; メイン mytest : mytest.c; mytest に依存します: mylib$(SUFLIB) ;
この設定では、ルート ディレクトリにいる限り、mytest をビルドしようとするたびにライブラリも再コンパイルされます (必要な場合)。ジャマーのメーリング リストで、それについて説明している古いメッセージを見つけました。
残念ながら、ジャムはサブディレクトリを下にしか見ることができないため、テストサブディレクトリにいる場合、これは機能しません。
そこで、という単純なスクリプトを作成jmk
し、実行可能ファイルと一緒に配置しましたjam
(両方がパスに含まれるようにします)。
if [ "$JMKROOT" = "" ] ; then
JMKROOT=`pwd`
export JMKROOT
fi
cd $JMKROOT
jam $*
JMKROOT 環境変数をプロジェクトのルートに設定します。
Windows シェルでコンパイルするとき (だから Jam を使いたいのです)、この小さなjmk.bat
バッチ ファイルを使用するだけです。
@echo off
if "%JMKROOT%" EQU "" set JMKROOT=%CD%
set OLDCD=%CD%
cd %JMKROOT%
jam %1 %2 %3 %4 %5 %6 %7 %8 %9
cd %OLDCD%
プロジェクトの 1 つでJam を使用していますが、まさにあなたの状況に遭遇しています。サブディレクトリに実行可能プログラムがbin
あり、静的ライブラリはlib
サブディレクトリに保持されています。
最上位の Jamfile に と入力しSubDir TOP ;
ます。$(TOP)
これにより、この Jamfile を含むディレクトリを指すように変数が初期化されます。次に、SubInclude TOP bin llvm-tblgen
andなどの行SubInclude TOP lib Support
を追加します。これにより、Jamfiles の内容がbin/llvm-tblgen
ビルドに追加されlib/Support
ます。
の Jamfile にbin/llvm-tblgen
、 と入力しSubDir TOP bin llvm-tblgen ;
ます。の Jamfile で同じことを行いますが、代わりlib/Support
に使用SubDir TOP lib Support ;
します。SubDir
ルールを入力する際の鍵はTOP
、この Jamfile を含むディレクトリまでの各サブディレクトリの名前を入力することです。
次に、実行可能ターゲットのリンクラインを設定するときは、次のようにサポート ライブラリを参照します$(TOP)/lib/Support/libLLVMSupport.a
。libLLVMSupport.a
ディレクトリに cd してbin/llvm-tblgen
そこから手動で Jam を実行したとしても、 Jam はこのパスを、Jam を実行した場所に相対的な の場所に展開します。
これにより、ディレクトリ間の依存関係を含む大規模なプロジェクトの管理が非常に簡単になります。このソリューションは、以前のソリューションとは異なり、Jam を直接実行できます。それがあなたを助けることを願っています!