Как только вы доберетесь до «специфичных для процессора» оптимизаций, все станет действительно сложно. Для конкретного платформенного компилятора действительно трудно быть по-настоящему «универсальным» при генерации объектного или «промежуточного» кода на соответствующем «уровне»: если это не что-то вроде кода «IL» (промежуточный язык) (например, C # -IL код (или Java-байт-код), для данного компилятора действительно трудно знать, «где остановиться» (поскольку оптимизация происходит повсеместно на разных уровнях компиляции, когда существует знание целевой платформы).
Еще одна мысль: как насчет компиляции в «предварительно обработанный» исходный код, как правило, с расширением «*.i
», а затем с распределенной компиляцией на разных архитектурах?
Например, большинство (все) компиляторы C и C ++ поддерживают что-то вроде:
cc /P MyFile.cpp
gcc -E MyFile.cpp
... каждый генерирует MyFile.i
, который является предварительно обработанным файлом. Теперь, когда файл включает ALL заголовки и другие #defines
, вы можете скомпилировать этот файл *.i
в целевой объектный файл (или исполняемый файл) после его распространения в других системах. (Возможно, вам придется проявить смекалку, если ваши макросы препроцессора специфичны для целевой платформы, но это должно быть довольно просто для вашей системы сборки, которая должна сгенерировать командную строку для этой предварительной обработки.)
Этот подход используется distcc для локальной обработки файла, поэтому на удаленных "фермах сборки" не нужно устанавливать какие-либо заголовки или другие пакеты. (Вы гарантированно получите один и тот же продукт сборки, независимо от того, как настроены машины в ферме сборки.)
Таким образом, аналогичным образом он будет иметь эффект централизации «конфигурации / предварительной обработки» для одного компьютера, но обеспечит кросс-компиляцию, компиляцию для конкретной платформы или поддержку фермы компоновки в распределенном режиме.
К вашему сведению - мне действительно нравится концепция distcc
, но последнее обновление для этого конкретного проекта было в 2008 году. Так что я бы заинтересовался другими подобными инструментами / продуктами, если вы их найдете. (А пока пишу похожий инструмент.)