Быстрая компиляция Qt C ++ на Windows - PullRequest
15 голосов
/ 12 октября 2011

У меня большой проект, использующий инфраструктуру Qt, и я пытаюсь найти самый быстрый способ его компиляции при установке Windows.

На моем компьютере с Linux я использую 3-летнюю установку Linux Mint с двухъядерным (машине 3 года, а не Linux Mint) , используя: make -j2 оба ядра заполнены (ish) и компилирует код относительно быстро, примерно через 10 минут после чистой сборки.

Тем не менее, на моем рабочем ПК с Windows 2,0 ГГц Intel Core 2 Quad (XP) мне никогда не удастся заставить компиляцию работать так же быстро, как на моем Linux-компьютере. Документы для разработчиков программы рекомендуют использовать Visual Studio C ++ с использованием файла проекта, сгенерированного из cmake, но в котором, похоже, используется только одно ядро, а компиляция занимает около 10 минут (из чистой сборки) при моей установке Linux *. *

Я пробовал использовать jom , но даже при использовании всех ядер это все равно занимает около полутора часов, потому что кажется, что он использует небольшое количество процессора на каждом ядре.

Мне не имеет смысла, что моя старая машина Linux собирается быстро, но четырехъядерное ядро ​​просто падает.

Ответы [ 6 ]

16 голосов
/ 12 октября 2011

За прошедшие годы скорость сборки наших Windows C ++ Qt помогла:

  1. Настроить настройки нашего антивирусного программного обеспечения, чтобы исключить из проверки местоположения нашего исходного кода,объектный код и все заголовки и библиотеки, против которых мы строим (Visual Studio, Qt и т. д.).(Существует отдельная проверка AV, которая запускается в одночасье для сканирования этих исключенных папок)
  2. Проведено сравнение скоростей сборки для различных различных пакетов AV.(Это было несколько лет назад, но в результате мы перешли с McAfee на Sophos)
  3. Убедитесь, что все файлы, к которым обращались во время сборки, находятся на локальном диске (мы использовали для сборки с Qt на сетевом диске, но это убило производительность сборки)
  4. Удостоверился, что Visual Studio настроен на одновременное выполнение нескольких шагов компиляции: Этот ответ показывает различные способы сделать это.
  5. Увеличенный объем оперативной памяти: в наши дни мы обнаруживаем, что 4 ГБ - это абсолютный минимум для значительной базы кода
  6. Переключение со статического на динамическое соединение для значительного сокращения времени соединения.
  7. Перешли на новые версии Visual Studio, так как MS улучшила производительность: посмотрите эту страницу Visual Studio 2010 и найдите «Быстрая компиляция»

Наши сборки Windows по-прежнему медленнее, чемLinux, но я не могу сказать, что это справедливое сравнение, поскольку наша общая сборочная коробка для Linux гораздо более эффективна, чем ПК для разработчиков.

(Кстати, если у вас естьих раньше не было, стоит прочитать, что Джефф Этвуд говорит о хороших конфигурациях для ПК разработчиков: например, Билль о правах программиста )

Обновление: 25/10/ 2012

Если вы работаете в Visual Studio 2008 со сборками DLL, В настоящее время я не рекомендую переходить на Visual Studio 2010 : существует проблема с ненужным повторным связываниемзависимые проекты, которые абсолютно убивают производительность разработчиков, по крайней мере, в .sln с примерно 20 файлами .vcxproj:

Может быть решение этой проблемы - я обновлю позже, как только я его протестирую - см. Ненужные ссылки на зависимые проекты при сборке с Visual Studio 2010 , где CORCOR сказал:

Если у других есть похожая проблема:

Отключение создания манифестации для проектов DLL и включение его только для проекта приложения helps!

С VS2008 это, похоже, не проблема.

3 голосов
/ 12 октября 2011

Это может быть чем-то вроде обходного пути, но мы используем Incredibuild, который распределяет сборку по нескольким машинам, что работает очень хорошо.Сокращает время сборки с 40 до 10 минут.(у нас есть 6 ПК разработчиков, подключенных для распределения нагрузки)

2 голосов
/ 12 октября 2011

У меня была такая же проблема. На наших машинах работало программное обеспечение, которое пыталось определить совместимость с Windows 7. Это программное обеспечение регистрировало каждый запуск программного обеспечения в базе данных и, таким образом, немного замедляло запуск новых процессов. Поскольку компилятор запускает новый процесс для каждого файла, это значительно замедляет весь прогон компиляции.

2 голосов
/ 12 октября 2011

Visual Studio может компилировать несколько проектов параллельно, но каждый отдельный проект компилируется последовательно. Поэтому, если вы скомпилируете решение с двумя проектами, тогда два процесса будут запущены параллельно, но если у вас есть только один проект, тогда запустится только один процесс, и он будет компилировать ваш исходный код последовательно.

Если вы используете MingW, вы можете подписаться на эту ветку:

Там вы найдете решение (установите MSys и укажите параметр -j при запуске make, чтобы указать количество параллельных заданий).

Здесь еще более простое решение: http://developer.qt.nokia.com/forums/viewthread/855/ (в QtCreator Tools-> Options укажите Jom в качестве инструмента сборки вместо NMake)

1 голос
/ 12 октября 2011

Я думаю, что лучший способ - разделить ваш проект на несколько проектов, каждый проект - это проект статической библиотеки. Таким образом, длительность компиляции в первый раз займет некоторое время, а затем будет короткой (в зависимости от ваших изменений).

1 голос
/ 12 октября 2011

В Visual Studio вы пошли на:

Project -> Properties -> C ++ и для параметра «Многопроцессорная компиляция» установлено значение Yes? Это помогло мне включить Multicore, что должно значительно ускорить его.

...