Как мне узнать, какие части кода компилируются долго?
Я уже использую предварительно скомпилированные заголовки для всех моих заголовков, и они определенно улучшают скорость компиляции. Тем не менее, всякий раз, когда я вношу изменения в исходный файл C ++, компиляция занимает много времени (это связано с процессором / памятью, не с привязкой к вводу-выводу - все кэшируется). Кроме того, это не связано с частью связывания, а только с частью компиляции.
Я пробовал включить / showIncludes
, но, конечно, поскольку я использую предварительно скомпилированные заголовки, после stdafx.h
ничего не включается. Итак, я знаю, что время компиляции требуется только для исходного кода, но я не знаю, какая его часть.
Я тоже пробовал делать минимальную сборку, но это не помогает.Как и / MP
, потому что это единственный исходный файл.
Я мог бы попробовать проанализировать исходный код и выяснить, какая часть является узким местом, добавив / удалив его, но это боль и не масштабируется. Кроме того, трудно что-то удалить и при этом позволить коду скомпилироваться - сообщения об ошибках, если таковые имеются, возвращаются почти сразу.
Есть ли лучший способ выяснить, что замедляет компиляцию?
Или, если нет способа: существуют ли какие-либо языковые конструкции (например, шаблоны?), Для компиляции которых требуется намного больше времени?
] Что у меня есть в исходном коде C ++:
Три (относительно больших) диалоговых класса ATL (включая определения / логику).
Они вполне могут быть причиной, но они в любом случае являются основной частью программы, поэтому очевидно, что они нуждаются в перекомпиляции, когда я их изменяю.
Случайные однострочные (или аналогичные небольшие) полезные функции, например преобразователь байтового массива в шестнадцатеричный
Ссылки на (встроенные) классы, находящиеся в моих файлах заголовков. (Один из файлов заголовков огромен, но в нем используются лишь минимальные шаблоны и, конечно, он предварительно скомпилирован. Другой - регулярное выражение TR1
- оно огромно, но почти не используется.)
Я ищу методов , которые я могу применить в более общем плане для выяснения причины этих проблем, не конкретных рекомендаций для моей очень конкретной ситуации. Надеюсь, это будет полезно и другим людям.