в настоящее время я пытаюсь портировать миллион sloc проектов прежней версии от тусклых .cmd сценариев до SCons. Частями его является VC ++, другие являются Delphi. Создание SConscripts для частей C++ было бризом.
Для создания части Дельфи, я записал очень простому разработчику, который обнаруживает, является ли это проектом библиотеки или программой. Вызов разработчика после объединения в цепочку через SConscript делает сканирования для вызова dcc32$subdir/project.dpr, что вводит в заблуждение dcc32 для поиска единиц в текущем каталоге вместо $subdir.
Существует ли способ сказать сканированиям вводить $subdir прежде, чем выполнить команды, находящиеся в sconscript, или я должен зафиксировать его в разработчике?
Заранее спасибо
SCons уже изменяет каталог SConscripts подкаталога при их чтении, поэтому похоже, что проблема должна быть исправлена в реальном построителе.
После того, как сценарии проанализированы и SCons запустит команды сборки, он остается в каталоге верхнего уровня. Затем команды выдаются с использованием имен путей относительно этого каталога верхнего уровня. Способ изменить это поведение - использовать ключевое слово chdir
в вашем Builder.
Пример со страницы руководства scons выглядит следующим образом:
b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}',
chdir=1)
env = Environment(BUILDERS = {'MyBuild' : b})
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in')
Вам необходимо указать компонент .file
, поскольку использование chdir
не изменяет имена, переданные в builder, т.е. они по-прежнему относятся к каталогу верхнего уровня.