Быстрый компилятор Qt С++ для окон

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

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

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

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

Не имеет для меня смысла, что моя старая Linux-машина строит быстро, но квадроцикл просто падает.

Ответы

Ответ 1

Следующие годы помогли ускорить разработку Windows С++ Qt за годы:

  • Настроить параметры нашего антивирусного программного обеспечения, чтобы исключить из проверки местоположения нашего Исходного кода, объектного кода и всех заголовков и библиотек, с которыми мы строим (Visual Studio, Qt и т.д.). (Там есть отдельная проверка AV, которая запускается за одну ночь, для сканирования этих исключенных папок).
  • Провести сравнение скоростей сборки в различных AV-пакетах. (Это было несколько лет назад, но в результате мы перешли от McAfee к Sophos).
  • Убедитесь, что все файлы, к которым обращаются во время сборки, находятся на локальном диске (мы использовали для сборки против Qt на сетевом диске, но это убило производительность сборки)
  • Убедитесь, что Visual Studio настроена на выполнение нескольких шагов компиляции сразу: В этом ответе показаны различные способы сделать это.
  • Увеличение объема оперативной памяти: мы находим в эти дни, что 4 ГБ является абсолютным минимумом, для значительной базы кода
  • Переключение между статическим и динамическим связями, массовое сокращение времени соединения.
  • Переместился в новые версии 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 и включение его только для использования проекта приложения!

С VS2008 это, казалось, не проблема.

Ответ 2

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

Ответ 3

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

Если вы используете MingW, вы можете следовать этой теме: http://www.mail-archive.com/[email protected]/msg00156.html

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

Еще проще решение: http://developer.qt.nokia.com/forums/viewthread/855/ (в QtCreator Tools- > Параметры указывают Jom как инструмент сборки вместо NMake)

Ответ 4

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

Ответ 5

В Visual Studio вы перешли к:

Project → Properties → С++ и превратили "Multiprocessor Compilation" в Yes? Это помогло мне включить Multicore, что должно ускорить его на самом деле довольно много.

Ответ 6

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