3

バックグラウンド

2 つのサブプロジェクトを持つ基本的な C++ サンプル プロジェクトをセットアップして、Scons を試しています。

  • Prj1 は Prj2 に依存する EXE です。
  • Prj2 は、一部の関数をエクスポートする DLL です。

SConstruct および SConscript ファイルのディレクトリ構造と内容は、こちらで確認できます。

問題

私が直面している問題は、コマンド ラインからこれらのターゲットをビルドするには、ビルド ディレクトリへの相対パスとプラットフォーム固有のファイル拡張子の両方を指定する必要があることです。

たとえば、Prj1 をビルドするには、次のことを行う必要があります。


build> scons ../bin/project1.exe

同様に、Prj2 をビルドするには、次のことを行う必要があります。


build> scons ../bin/project2.dll

質問

相対パスとプラットフォーム固有のファイル拡張子を指定せずに、SCons にこれらのプロジェクトをビルドさせるにはどうすればよいですか?

希望:


build> scons project1 
build> scons project2

考えられる解決策

  • エイリアスを使用 - これは私が望んでいるものだと確信していますが、明らかに何かを台無しにしています。私は成功せずに次のことを試しました:

prj1_env.Alias( 'project1', PROG)
prj1_env.Alias( 'project1', os.path.join( BIN_DIR, PROG) )

参考文献

4

1 に答える 1

3

これをコメントではなく回答に移動します。:)

参考文献

  • プロジェクトのビルド出力を Scons と同じディレクトリに配置するにはどうすればよいですか?

Alias は、2 番目の引数として実際のターゲットを必要とします。問題は、「project1」(PROG の値) が実際のターゲットではないことだと思います。これを修正する簡単な方法は次のとおりです。PrefixProgram が値を返すようにします。

def PrefixProgram(env, outdir, trgt, srcs):
    return env.Program(target = os.path.join(outdir, trgt), source = srcs)

それで:

target = PrefixProgram( prj1_env, BIN_DIR, PROG, SOURCES )
prj1_env.Alias("project1", target)

もちろん、これを行うことができます:

prj1_env.Alias("project1", PrefixProgram( prj1_env, BIN_DIR, PROG, SOURCES ))

しかし、私は最初の方法が理解しやすいと思います。

これが役立つことを願っています。

于 2008-11-12T17:25:38.097 に答える