В настоящее время я пытаюсь создать систему сборки вокруг Scons, которая бы использовала драйвер Boost Wave в качестве собственного препроцессора кода C ++. После предварительной обработки код компилируется с MSVC. На данный момент я запускаю волну для каждого исходного файла, видимого Scons, из файла Sconscript. Это работает, но есть проблема — она довольно медленная, потому что она не использует кеш компиляции Scons.
Как бы вы порекомендовали интегрировать пользовательский этап предварительной обработки в систему сборки SCons таким образом, чтобы использовался кэш компиляции? Очевидно, что мне также нужно надлежащее сканирование #include, параллельная компиляция и т. Д. Я не очень разбираюсь в SCons, поэтому я ищу кого-то, кто укажет мне правильное направление.
Мои текущие две области исследований:
Чтобы использовать кеш 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 и, следовательно, получающей правильные зависимости включения. Отчаянно нуждаюсь в репутации …
Других решений пока нет …