如何仅在Qt是用ltcg构建时才有条件地启用ltcg?



qmake项目有时使用用ltcg编译的Qt构建。由于 Qt 的 ltcg 构建设置不会自动传播到使用给定 Qt 安装的项目的设置,因此 MSVC 链接器会浪费时间并发出以下警告:

找到 MSIL .netmodule 或使用/GL 编译的模块;使用/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
}

Qt的配置系统中缺少QMAKE_LIBFLAGS选项——图书馆员抱怨缺少/ltcg,就像链接器一样。

以下代码片段用于查找这些变量:

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

最新更新