2009-08-19 8 views
1

У меня есть сборка C++/CLI, состоящая из примерно 50 исходных файлов. Код в этой сборке связывает статически с несколькими библиотеками C++ для выполнения различных задач типа «тяжелый».Visual Studio 8: Время сборки в сборках смешанного режима

Я использую Visual Studio 8 (2005) SP1 для сборки этой сборки.

Строительство только этой сборки (без зависимостей и т. Д.) Через «Только проект» -> «Только перестройка» занимает около 4,5 минут на достойной двухъядерной машине. Ниже сокращенный вывод сборки с аннотацией приблизительного времени:

Compiling... 
(file 0) 
(file 1) 
... 
(file N)     // About 2 min total to compile all files 
Linking...     // About 12s 
Generating Code   // 42s 
Finished Generating Code // < 1s 
Embedding Manifest   // < 1s 
Generating Code   // 30s 
Finished Generating Code 
(15 seconds of nothing) 
Done 

Как я должен начать отладку, почему эта сборка занимает так много времени, чтобы построить? Время компиляции и ссылки, хотя и не очень хорошее, вероятно, связано с тем, что я ожидаю от проекта такого размера. Меня беспокоит тот факт, что я вижу два шага «Generating Code», каждый из которых занимает гораздо больше времени, чем большинство других проектов.

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

Кто-нибудь знает, что именно может привести к двум шагам «Generating Code», которые занимают так много времени? Есть ли проект, который мне не хватает?

ответ

1

Вы используете предварительно скомпилированные заголовки для своего проекта? Управляемый C++ поддерживает его так же, как неуправляемый C++. Чтобы переключить проект на предварительно скомпилированные заголовки:

См. this article (прокрутите вниз до раздела «Предварительно скомпилированный заголовок») для подробных подробностей.

  • Убедитесь, что каждый файл .cpp начинается с #include «XXXX», где xxxx.h является какой-то файл заголовка, который включает в себя все общие файлы заголовков, используемых в проекте.
  • Создайте файл xxxx.cpp, который включает в себя только файл xxxx.h, и не имеет никакого другого кода
  • В VS компилировать параметры для всего проекта, для всех конфигураций (сборка & релиза), в предварительно скомпилировать секции заголовка , заставьте весь проект использовать предварительно скомпилированный заголовок xxxx.h.
  • В настройках компиляции VS для файла xxxx.cpp только для всех конфигураций (сборка &), в разделах предварительного компиляции заголовка задайте его «сгенерировать предварительно скомпилированный заголовок».

Компиляция проекта теперь должна занимать часть предыдущего времени сборки.

Смежные вопросы