2012-04-11 10 views
0

私は、いくつかの個別のSconstructファイルと1つのトップレベルのSConstructファイルでプロジェクトをセットアップしています。SConsは、複数のSConstructファイル(OptionConflictError)で競合するオプションを処理します。

個別の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ファイルに、私ができるようにしたいと思います私はこれを行うにしようと、私はOptionConflictError上を取得します、

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

しかし:下位レベルのSConstructファイルのすべてを呼び出すために、私はトップレベルSConstructにこれを追加しました--prefixオプションがすでに(binary1/SConstructに)定義されているため、3210:

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

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

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

より良いものを整理できますか?残念ながら個々のSConstructファイルが必要なので、あまり再構成することはできません。

答えて

1

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

私はその答えはあなたを助けるだろうと思う、最近同様の質問に答えてSConsctructとSConscriptファイルを整理する方法を提案した:

Real Hierarchical Builds with SCons?

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

+0

私は本当に階層的なビルドに問題はありません、私は 'AddOption()'呼び出しを削除するときにビルドすることができます。私は問題は、 'AddOption()'は特定の環境に限定されないので、各SConscriptファイルは 'OptionConflictError'を引き起こす同じオプションを追加しようとしているということです。しかし、リンクした投稿には間違いなく良い情報がありました。ありがとうございました! –

+0

あなたがSConstructスクリプトとSConscriptスクリプトを私が参照した投稿のように整理すれば、あなたの問題を解決するはずです。 AddOption()はグローバルコールで、特定のenvで呼び出すことはできません。多くのSCons関数は、グローバルに、または特定のenvで呼び出すことができ、AddOption()はグローバルでなければなりません。 – Brady

関連する問題