Предварительно скомпилированные заголовки Visual Studio основаны на файле заголовка, включающем все, что должно быть предварительно скомпилировано, обычно обычно включаются редко изменяемые файлы заголовков, такие как материалы стандартной библиотеки. Он подключен к stdafx.cpp, для которого в настройках установлено значение «генерировать предварительно скомпилированный заголовок», он включает только stdafx.h.
Затем Visual studio заставляет все файлы включать stdafx.h в качестве первого определения препроцессора, чтобы избежать проблем с заголовками, включенными перед ним, или изменить макрос #define, который влияет на синтаксический анализ stdafx.h.
Я думаю, что самый простой способ сопоставить это поведение с g ++ - сделать так, чтобы он предварительно компилировал только stdafx.h и обычно включал другие заголовки. Это будет похоже на то, что вы делаете в Visual C ++. Вы также можете переименовать stdafx во что-нибудь менее глупое, например "precompiled_.h" или что-то в этом роде. Вместо этого легко настроить Visual Studio для использования этого файла.
Я реализовал такую систему с использованием файлов make для g ++, и это дало некоторую производительность, но мне не удалось получить такой же прирост производительности, который я получаю от предварительно скомпилированных заголовков в Visual Studio. Это было некоторое время назад, и с тех пор g ++, возможно, улучшился. Мне удалось заставить CMake генерировать проекты Visual Studio с предварительно скомпилированными заголовками, я еще не пробовал его для их создания Makefile, но это не должно быть проблемой.
В Visual Studio есть и другие приемы для повышения скорости компиляции. Один из них - это компиляция множества cpp-файлов с одинаковыми настройками за один пакет. Это можно сделать вручную, используя то, что обычно называют системой сборки единства, где вы включаете несколько cpp-файлов в один файл и собираете его за один раз, сохраняя при этом синтаксический анализ заголовка и диск io.
person
Laserallan
schedule
19.02.2009