2

何年にもわたってmakeを使用した後、プロジェクトでjam(実際にはftjam)を使い始めました。

プロジェクトワークスペースには、次の2つのディレクトリがあります。

  • src実行可能ファイルとライブラリを構築する場所
  • test私のテストプログラムはどこにありますか

テストプログラムへの依存関係を設定して、コンパイルするたびにライブラリも再コンパイルされるようにしようとしています(必要な場合)。

それを行う方法について何か提案はありますか?

4

2 に答える 2

2

わかりました、これは私が思ったほど簡単な質問ではないようですので、私は自分で解決策を考え出しました. スクリプトを使用して最終結果を達成するため、Jam の第一人者が Jam のみのソリューションを提供してくれることを願っています。

  • 共通の定義を使用して、プロジェクトのルート ディレクトリに Jamrules を作成します。

  • プロジェクトのルート ディレクトリに、次の内容の Jamfile を作成します。

    サブディレクトリ。;
    サブインクルード . ソース;
    サブインクルード . テスト ;

  • src ディレクトリに Jamfile を作成する
    サブディレクトリ..src;
    ライブラリ mylib : mylib.c ;

  • test ディレクトリに Jamfile を作成する
    サブディレクトリ..テスト;
    メイン 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%
于 2008-10-14T16:02:53.263 に答える
0

プロジェクトの 1 つでJam を使用していますが、まさにあなたの状況に遭遇しています。サブディレクトリに実行可能プログラムがbinあり、静的ライブラリはlibサブディレクトリに保持されています。

最上位の Jamfile に と入力しSubDir TOP ;ます。$(TOP)これにより、この Jamfile を含むディレクトリを指すように変数が初期化されます。次に、SubInclude TOP bin llvm-tblgenandなどの行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.alibLLVMSupport.aディレクトリに cd してbin/llvm-tblgenそこから手動で Jam を実行したとしても、 Jam はこのパスを、Jam を実行した場所に相対的な の場所に展開します。

これにより、ディレクトリ間の依存関係を含む大規模なプロジェクトの管理が非常に簡単になります。このソリューションは、以前のソリューションとは異なり、Jam を直接実行できます。それがあなたを助けることを願っています!

于 2013-08-26T00:03:50.660 に答える