Иногда проект qmake создается с использованием Qt, который был скомпилирован с помощью ltcg. Поскольку параметр сборки Qt ltcg не распространяется автоматически на проект, использующий данную установку Qt, компоновщик MSVC тратит время и выдает следующее предупреждение:
MSIL .netmodule или модуль, скомпилированный с / GL found; перезапуск ссылки с / LTCG; добавьте / LTCG в командную строку ссылки для улучшения производительности компоновщика
Есть ли способ условно включить ltcg для проекта, если в Qt, с которым он был собран, также была включена ltcg?
Оказывается, что параметры конфигурации, используемые для сборки каждого модуля 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)
}
Других решений пока нет …