私は、いくつかの個別の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ファイルが必要なので、あまり再構成することはできません。
私は本当に階層的なビルドに問題はありません、私は 'AddOption()'呼び出しを削除するときにビルドすることができます。私は問題は、 'AddOption()'は特定の環境に限定されないので、各SConscriptファイルは 'OptionConflictError'を引き起こす同じオプションを追加しようとしているということです。しかし、リンクした投稿には間違いなく良い情報がありました。ありがとうございました! –
あなたがSConstructスクリプトとSConscriptスクリプトを私が参照した投稿のように整理すれば、あなたの問題を解決するはずです。 AddOption()はグローバルコールで、特定のenvで呼び出すことはできません。多くのSCons関数は、グローバルに、または特定のenvで呼び出すことができ、AddOption()はグローバルでなければなりません。 – Brady