0

プロジェクト ターゲット (バイナリとライブラリ) を json ファイルで指定しています。

指定されたターゲットの環境を問題なく作成できます。今、特定のビルド ディレクトリをサポートしようとしています。

scons に関する私の知識はまだ非常に基本的なものですが、それを行う正しい方法は SConscript を VariantDir と共に使用することです。しかし、既に json で指定されたターゲットがあり、ターゲットごとに SConscript ファイルを作成するのは冗長です (さらにメンテナンスのコストがかかります)。

私の質問は、実行時に SConscript オブジェクトを動的に作成することは可能ですか?

前もって感謝します。

4

2 に答える 2

0

VariantDir は SConscturct ファイルでは機能しません (間違っているかもしれませんが、それを行う方法が見つかりません)。バリアント dir を使用して SConscript ファイルを作成し、必要なことを行うだけです。

#SConsruct
env = CreateEnvironment()
SConscript('SConscript', variant_dir = 'mybuilddir', exports = 'env', duplicate = 0)

# Do all work in SConscript
Import('env')
env.Program(...)
env.SharedLibrary(...)
...

また、プロセスを 2 つの状態に分割することもできます。状態 1 - 生成された SConscript ファイル。状態 2 - 生成された SConscript ファイルを実行します。

if 'generate' in COMMAND_LINE_TARGETS:
  # your code to generated SConscript from json
  Exit(0)

sconscriptFiles = getSconscriptFiles() # some code to get your sconscript, by mask for example
if len(sconscriptFiles) < 1:
    print "You need to generate files at first: scons generate"
    Exit(1)
for file in sconscriptFiles :
   SConscript(file, variant_dir = 'build' + file, duplicate = 0)
于 2012-10-02T10:12:20.943 に答える
0

VariantDir()関数を使用して、または SConscript() 呼び出しの一部として、ビルド ディレクトリを指定できます。ここでは、さまざまなオプションについてすべて説明します。複数の SConstruct ファイルを使用したくない場合は、ここで詳細に説明されているように、VariantDir() 関数を使用する必要があります。

簡単な例を次に示します。

    env = 環境()

# It may be as simple as setting src_dir='.', but set accordingly
# duplicate=0 tells SCons NOT to copy source files to variantDir, set accordingly
# VariantDir() can be called multiple times so as to change dirs per builder call
VariantDir(variant_dir = 'pathToBuildDir', src_dir = 'pathToSource', duplicate=0)
# Now call the builders here

json と SCons を混在させたい理由はまだ明らかではありません。やむを得ない理由がない限り、すべてを Python である SCons に保持することをお勧めします。

編集: ファイルではなく SConscript オブジェクトの作成について質問されたことに気付きました。

SCons プログラミング API を調べましたが、SConscript オブジェクトを作成できるものは見つかりませんでした。実際には、SConscript() 関数の呼び出しを、開いて処理する必要のあるファイルとして扱うだけで、ほとんど SConstruct の拡張として扱われるため、SConscript オブジェクトの概念が存在するとは思いません。

要約すると、補助的な SConscript ファイルを作成するか、VariantDir() の呼び出しを処理する必要があります。プロジェクトのディレクトリ構造によっては、SConscript ファイルを作成する必要がない場合があります。ルート SConstruct からすべてを行うことができます。SConscript ファイルは必要ありません。ビルド スクリプトをより適切に整理するのに役立ちます。

于 2012-09-29T19:30:18.167 に答える