Как я могу заставить сборщик SConscript сменить каталог? - PullRequest
5 голосов
/ 07 июня 2010

В настоящее время я пытаюсь перенести унаследованный проект на миллион смест из скучных сценариев .cmd в SCons. Части этого - VC ++, другие - Delphi. Создание SConscripts для кусков C ++ было легким делом.

Для сборки части Delphi я написал очень простой конструктор, который определяет, является ли это программным или библиотечным проектом. Вызов компоновщика после объединения в цепочку через SConscript заставляет scons вызывать dcc32 $ subdir / project.dpr, что вводит в заблуждение dcc32 для поиска модулей в текущем каталоге вместо $ subdir.

Есть ли способ сказать scons, чтобы они вводили $ subdir перед выполнением команд, находящихся в скрипте, или я должен исправить это в компоновщике?

Заранее спасибо

1 Ответ

5 голосов
/ 07 июня 2010

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 не изменяет имена, передаваемые построителю, т. Е. Они все еще относятся к каталогу верхнего уровня.

...