Как условно включить ltcg, только если Qt был собран с ltcg?

Иногда проект qmake создается с использованием Qt, который был скомпилирован с помощью ltcg. Поскольку параметр сборки Qt ltcg не распространяется автоматически на проект, использующий данную установку Qt, компоновщик MSVC тратит время и выдает следующее предупреждение:

MSIL .netmodule или модуль, скомпилированный с / GL found; перезапуск ссылки с / LTCG; добавьте / LTCG в командную строку ссылки для улучшения производительности компоновщика

Есть ли способ условно включить ltcg для проекта, если в Qt, с которым он был собран, также была включена ltcg?

1

Решение

Оказывается, что параметры конфигурации, используемые для сборки каждого модуля Qt, сохраняются в QT.<module>.module_config, где <module> это имя модуля, например core,

Таким образом, учитывая, что каждый проект Qt использует core модуль, мы можем переслать опцию из этого модуля в наш файл проекта следующим образом:

contains(QT.core.module_config, ltcg) {
CONFIG += ltcg
msvc: QMAKE_LIBFLAGS *= /ltcg
}

QMAKE_LIBFLAGS опция отсутствует в системе конфигурации Qt — библиотекарь жалуется на отсутствие /ltcg так же, как делает компоновщик.

Следующий фрагмент использовался для поиска этих переменных:

for(var, $$list($$enumerate_vars())) {
value = $$eval($$var)
contains(value, ltcg): message($$var = $$value)
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]