Я пытаюсь собрать отладочную версию особенно сложного макета проекта. Одна из вещей, которые мне нужно сделать, - это скопировать недавно созданные библиотеки DLL поверх существующих библиотек, которые находятся под контролем Source Safe и поэтому доступны только для чтения. Я надеялся использовать 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
Обновление
ОК. Я понял это, шагнув через Scons, пока он работал. Похоже, что Scons удаляет цели перед их созданием (см. _rmv_existing
в FS.py, а также эту страницу на странице документации scons). Если вы столкнулись с этой проблемой, вы можете пометить цель как «Драгоценную», но у вас все равно будут проблемы, если вы используете «-c».
Здесь нет действительно хорошего решения. Ну хорошо.