Russian Qt Forum

Qt => Общие вопросы => Тема начата: yarick от Январь 26, 2013, 16:26



Название: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: yarick от Январь 26, 2013, 16:26
В релиз-версии qmake вызывает g++ с ключём -O2. Но я читал что есть ещё -O3, которая представляет более крутую оптимизацию, например встраивание инлайн-функций и прочее, что бы пригодилось. Зачем оптимизировать меньше, если можно больше? Как заставить qmake использовать -O3?


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: lit-uriy от Январь 26, 2013, 17:29
О3 специфический режим оптимизации, он не всегда оптимальнее О2, поищи по инету.

О том как использовать ключи компилятора и линкера смотри Асистент
На память не помню, что-то вроде:
cxx-flags += ....
нужно добавить в pro-файл


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: ViTech от Январь 27, 2013, 13:30
Как заставить qmake использовать -O3?
В pro-файл добавить, например, следующие строки:
Код:
*-g++ {
  QMAKE_CXXFLAGS += -O3
}


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: twp от Январь 28, 2013, 18:29
Можно каждый раз прописывать в pro-файле, а можно всего один раз отредактировать файл qmake.conf из mkspecs.
Ведь при генерации мэйкфайлов qmake всегда считывает параметры из qmake.conf.
После редактирования желательно пересобрать Qt


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: ViTech от Январь 29, 2013, 10:06
Можно каждый раз прописывать в pro-файле, а можно всего один раз отредактировать файл qmake.conf из mkspecs.

Вряд ли это хороший вариант. Для разных проектов могут понадобиться разные параметры компилятора/линкера, все равно придётся переопределять. Всякие QMAKE_* для того и сделаны, чтоб каждый раз mkspecs не править.


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: twp от Январь 29, 2013, 13:44
Можно каждый раз прописывать в pro-файле, а можно всего один раз отредактировать файл qmake.conf из mkspecs.

Вряд ли это хороший вариант. Для разных проектов могут понадобиться разные параметры компилятора/линкера, все равно придётся переопределять. Всякие QMAKE_* для того и сделаны, чтоб каждый раз mkspecs не править.
Что я не так написал? Еще раз напишу более доходчиво - если надо использовать одни и те же опции компилятора/линкера для всех проектов (как новых так и уже созданных), лучше один раз подправить qmake.conf чем постоянно править pro-файлы. Еще один способ - это определить все общие опции в pri-файле, например config.pri и не забывать добавлять его в pro-файл.


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: twp от Январь 29, 2013, 14:03
Кроме того, нужно использовать QMAKE_CXXFLAGS_RELEASE поскольку QMAKE_CXXFLAGS применяется как к релизной так и дебажной сборке.


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: yarick от Февраль 26, 2013, 13:07
Добавил, теперь при компиляции выводит что-то вроде
"g++ -c -pipe -std=gnu++11 -O2 -O3 ..."
Т.е. две опции подряд... Это нормально, т.е. он будет оптимизировать в режиме O3?


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: ViTech от Февраль 26, 2013, 13:52
"g++ -O2 -O3 ..."
Вроде наоборот надо, кто первый - того и тапки.


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: Alex Custov от Февраль 26, 2013, 13:54
Добавил, теперь при компиляции выводит что-то вроде
"g++ -c -pipe -std=gnu++11 -O2 -O3 ..."
Т.е. две опции подряд... Это нормально, т.е. он будет оптимизировать в режиме O3?

да

Цитировать
If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.


Название: Re: Почему qmake оптимизирует с -O2, а не с -O3?
Отправлено: ViTech от Февраль 26, 2013, 14:48
Цитировать
If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.
Действительно, получается кто последний - того и тапки...

Тогда тут еще особенность:
QMAKE_CXXFLAGS добавляет ключи перед ключами оптимизации,
QMAKE_CXXFLAGS_RELEASE, QMAKE_CXXFLAGS_DEBUG там можно переопределить ключи оптимизации.