Scons — использование собственного препроцессора с кешем scons

В настоящее время я пытаюсь создать систему сборки вокруг Scons, которая бы использовала драйвер Boost Wave в качестве собственного препроцессора кода C ++. После предварительной обработки код компилируется с MSVC. На данный момент я запускаю волну для каждого исходного файла, видимого Scons, из файла Sconscript. Это работает, но есть проблема — она ​​довольно медленная, потому что она не использует кеш компиляции Scons.

Как бы вы порекомендовали интегрировать пользовательский этап предварительной обработки в систему сборки SCons таким образом, чтобы использовался кэш компиляции? Очевидно, что мне также нужно надлежащее сканирование #include, параллельная компиляция и т. Д. Я не очень разбираюсь в SCons, поэтому я ищу кого-то, кто укажет мне правильное направление.

Мои текущие две области исследований:

  • Найти какой-либо способ вызывать функции установки / извлечения кеша вручную, но это рискованно — я не хочу загрязнять кеш недопустимыми записями.
  • Создание специального инструмента / псевдобилдера / чего-либо, что позволило бы мне выполнить две команды. Или попытайтесь сделать так, чтобы scons использовал два инструмента / псевдобилдера. Это кажется сложным.
  • Ответ Тома Таннера, который, кажется, страдает от неправильного определения зависимостей #include.

1

Решение

Чтобы использовать кеш scons, у вас должна быть цель. scons кеширует цель на основе предоставленных файлов и команды build.

Даже без компоновщика вы можете написать себе командный процессор примерно так.

out_cc = env.Command('file.wave.cpp', 'file.cpp', 'wave command < $SOURCE > $TARGET')
env.Program('myprog', ['this.cc', 'that.cc', out_cc])

Это будет использовать кеш.

Вы можете добавить строителя, если хотите, так что вы можете сделать это за один шаг. Сборщики хороши тем, что вы будете использовать одну и ту же команду в нескольких местах или иметь более сложные требования, чем можно описать с помощью простой команды. Однако они не обязательны для работы кеша.

Редактировать: Обновлено, чтобы включить решение liosan для волны, берущей файлы .cpp и производящей файлы .cpp и, следовательно, получающей правильные зависимости включения. Отчаянно нуждаюсь в репутации …

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]