特に難しいプロジェクト レイアウトのデバッグ ビルドをまとめようとしています。私がしなければならないことの 1 つは、最近ビルドされた DLL を、Source Safe の管理下にある既存の DLL の上にコピーすることです。したがって、読み取り専用です。これを管理するために Scons を使用することを望んでいましたが、ターゲットが読み取り専用の場合、Scons はエラーになります。私のコマンドの一部は、読み取り可能に設定することですが、scons が最初にエラーになるため、私のコマンドは実行されません。とにかくこの動作をオーバーライドする方法はありますか?
これがデモンストレーションです。ご覧のとおり、読み取り専用ビットが設定されている場合、「読み取り専用ビットをオフにする」コマンドは実行されません。
C:\scs\dev\test>type Sconstruct
env = Environment()
env.Command(
"b.txt", "a.txt",
[
r"if exist $TARGET c:\windows\system32\attrib -r $TARGET",
Copy("$TARGET", "$SOURCE")
]
)
C:\scs\dev\test>echo "test" > a.txt
C:\scs\dev\test>scons -Q b.txt
if exist b.txt c:\windows\system32\attrib -r b.txt
Copy("b.txt", "a.txt")
C:\scs\dev\test>echo "test2" > a.txt
C:\scs\dev\test>attrib +r b.txt
C:\scs\dev\test>scons -Q b.txt
scons: *** [b.txt] C:\scs\dev\test\b.txt: Access is denied
アップデート
OK - 実行中の Scons をステップ実行して、これを理解しました。Scons はターゲットをビルドする前にターゲットを削除するようです (FS.py を参照してください。scons ドキュメント ページのこの_rmv_existing
ページも参照してください)。この問題が発生した場合は、ターゲットを「Precious」としてマークできますが、「-c」を使用すると問題が発生します。
ここには本当に良い解決策はありません。しかたがない。