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)
}