Поддержка precompiled headers в qmake

qmake позволяет использовать precompiled headers (предварительно откомпилированные заголовки) с теми компиляторами, которые поддерживают этот механизм.

MSVC и MinGW поддерживают. Проверить, как у некоторой платформы обстоят дела с precompiled headers, можно с помощью переменной CONFIG — для всех таких платформ в нее будет добавлено значение precompile_header:

Все, что нужно сделать для того, чтобы заголовочный файл обрабатывался как precompiled header — это указать его в переменной PRECOMPILED_HEADER:

Приятно то, что под MSVC не нужно руками создавать .cpp файл-заглушку (обычно stdafx.cpp) для прекомпилируемого заголовка. qmake создаст заглушку автоматически.

Цикл: qmake

  7 comments for “Поддержка precompiled headers в qmake

  1. Роман
    07.09.2013 at 11:20

    На мой взгляд статью неплохо бы дополнить если она для новичков. После прочтения статьи захотелось добавить precompiled headers в свой проект, а не все моменты были ясными. Если ничего изменять не хочется, то добавьте хотя бы ссылку на документацию. На мой взгляд стоит привести пример stable.h и в примере из документации еще объявляют CONFIG += precompile_header. Также сказать, что stable.h не нужно подключать в исходных файлах программы. Все таки использование precompiled headers в qmake несколько отличается от других систем.

    • mgsxx
      07.09.2013 at 11:32

      Можно было и расписать, но я не ставил своей целью объяснить, что такое precompiled headers. Это тема для отдельной большой статьи, и прямого отношения к qmake эта тема не имеет. Так что предполагается, что человек в курсе этой темы.

      Объявлять CONFIG += precompiled_header не нужно — эта опция и так включена в тех mkspecs, в которых precompiled headers поддерживаются.

      stable.h не нужно добавлять в HEADERS, но можно. Я, кстати, так и делаю — чтобы stable.h показывался в списке файлов проекта в интерфейсе Qt Creator.

      • Роман
        07.09.2013 at 11:58

        Все равно спасибо за статью. Все таки статья о правильном использовании precompiled headers то же бы не помешала. Особенно, если есть что рассказать. Ясно что нужно подключать только редко меняющиеся файлы. Но остается не понятным как правильно выбрать нужное количество. Например, подключать QtWidgets целиком, или только те классы что используются в программе? Насколько я понял можно переборщить с размером precompiled headers и сборка замедлится.

        • mgsxx
          07.09.2013 at 12:02

          Сборка замедлится только один раз. Так что я бы включал весь QtWidgets, равно как и все используемые стабильные библиотеки в полном объеме.

          Имхо, размер скомпилированного precompiled header имеет значение только для действительно гигантских проектов — а компиляция таких проектов есть сама по себе весьма отдельная тема.

          • Роман
            07.09.2013 at 15:56

            Спасибо, буду знать.

  2. Роман
    04.10.2013 at 13:47

    Здравствуйте. Хотелось бы узнать что вы делаете для ускорения компиляции проекта? И использовали ли вы пересборку qmake как советуют в этой статье http://qtlinux.narod.ru/parallel_make.htm ? Ключ -jx для qmake я использовал, precompiled headers тоже, быстрый компилятор взять не могу и меня интересуют только сборка на одной машине. Пробовал убирать лишние include файлы, ну и конечно выставлен уровень компиляции без оптимизаций. Купить быстрее компьютер пока не могу. Спасибо.

    • mgsxx
      04.10.2013 at 16:29

      Нет, ничем таким я не занимался. Мой самый толстый проект на чистую собирается где-то, наверное, минут пять на MinGW. На MSVC быстрее. Поскольку мне никогда не прищемляло хвост в отношении скорости компиляции, то этим вопросом я и не занимался далее, чем настройкой precompiled headers.

Добавить комментарий