大規模な SCons プロジェクトで、デバッグ ビルドとリリース ビルドを使用してビジュアル スタジオ プロジェクトをセットアップしようとしています。マニュアルは宣言している
異なるバリアントを使用して MSVSProject を複数回呼び出すことができます。すべてのバリアントが、適切なビルド ターゲットとソースと共にプロジェクト ファイルに追加されます。
ただし、これを実行しようとすると、「同じターゲットをビルドする複数の方法が指定されました」というエラーが表示されます。
最小限の例 (SConstruct ファイル)
import os
from SCons.Script import *
env = Environment()
for variant in ['debug', 'release']:
env.MSVSProject(
target = 'hello' + env['MSVSPROJECTSUFFIX'],
srcs = 'hello.cpp',
buildtarget = os.path.join(variant, 'hello.exe'),
variant = variant)
これにより、次の出力が得られます。
scons: Reading SConscript files ...
scons: warning: Two different environments were specified for target hello.vcxproj,
but they appear to have the same action: GenerateProject(target, source, env)
File "SConstruct", line 7, in <module>
scons: *** Multiple ways to build the same target were specified for: hello.vcxproj (from ['prj_inputs:"python.exe" -c "from os.path import join; import sys; sys.path = [ join(sys.prefix, \'Lib\', \'site-packages\', \'scons-3.1.2\'), join(sys.prefix, \'scons-3.1.2\'), join(sys.prefix, \'Lib\', \'site-packages\', \'scons\'), join(sys.prefix, \'scons\') ] + sys.path; import SCons.Script; SCons.Script.main()" -C "." -f SConstructutf-8; ppdefs: incpath: "debug\\hello.exe" "debug" "hello.cpp "hello.vcxproj"'] and from ['prj_inputs:"python.exe" -c "from os.path import join; import sys; sys.path = [ join(sys.prefix, \'Lib\', \'site-packages\', \'scons-3.1.2\'), join(sys.prefix, \'scons-3.1.2\'), join(sys.prefix, \'Lib\', \'site-packages\', \'scons\'), join(sys.prefix, \'scons\') ] + sys.path; import SCons.Script; SCons.Script.main()" -C "." -f SConstructutf-8; ppdefs: incpath: "release\\hello.exe" "release" "hello.cpp "hello.vcxproj"'])
File "SConstruct", line 7, in <module>
これは SCons のバグですか、それともこれがどのように機能するのか理解していませんか?
バリアントは単一の呼び出しとしてリストで渡すことができることを認識していますが、既存のビルド インフラストラクチャを大幅に書き直さない限り、さまざまなビルド タイプのソースとターゲットの個別のリストを維持することはできません。ビルド タイプごとに 1 つの環境を使用することを望んでいましたが、マニュアルからの引用によると、SCons はそれらを 1 つの MSVS プロジェクトに組み合わせることができるように思われます。
どんな助けでも大歓迎です!