1

いくつかの個別の Sconstruct ファイルと 1 つのトップレベルの SConstruct ファイルでプロジェクトをセットアップしています。

project/SConstruct -- toplevel SConstruct file
project/binary1/SConstruct -- lower level SConstructs
project/binary2/SConstruct
project/binary3/src/SConstruct

オプションを使用して個々の SConstruct ファイルを呼び出せるようにしたいと考えています。したがって、各 SConstruct は次のように呼び出すことができます。

scons install --prefix=/usr/local/bin

SConstruct ファイルにそのオプションのセクションがあります。

AddOption('--prefix',
          dest='prefix',
          type='string',
          nargs=1,
          action='store',
          metavar='DIR',
          default=prefix,
          help='installation prefix')

また、トップレベルの SConstruct ファイルで、下位レベルの SConstruct ファイルをすべて呼び出せるようにしたいので、これをトップレベルの SConstruct に追加しました。

SConscript(binary1/SConstruct)
SConscript(binary2/SConstruct)
SConscript(binary3/src/SConstruct)

ただし、これを実行しようとすると、オプションが既に定義されているため、 OptionConflictErroronが表示されます (in ):binary2/SConstruct--prefixbinary1/SConstruct

OptionConflictError: option --prefix: conflicting option string(s): --prefix:

これを回避する方法はありOptionConflictErrorますか?

AddOption()への呼び出しをtryブロックで囲むことができることはわかっていますが、より良い方法はありますか? を追加できますconflict_handlerか? --prefixオプションが既に存在するかどうかを確認できますか?

物事をうまく整理できますか?残念ながら個々の SConstruct ファイルが必要なので、あまり整理できません。

4

1 に答える 1

1

SConscript ファイルをサブディレクトリ (binary1、binary2、および binary3) に定義して、これを行う方がよいと思います。

最近、同様の質問に回答し、SConsctruct および SConscript ファイルを整理する方法を提案しました。その回答が役立つと思います。

SCons を使用した実際の階層構造?

このよう--prefixにして、SConstruct ファイルでオプションを定義し、ルート SConstruct ファイルからサブディレクトリ SConscript ファイルを呼び出して、前述のエラーを回避することができます。

于 2012-04-11T14:20:14.837 に答える