2

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

找到 MSIL .netmodule 或使用 /GL 编译的模块;重新启动与 /LTCG 的链接;将 /LTCG 添加到链接命令行以提高链接器性能

如果构建的 Qt 也启用了 ltcg,有没有办法有条件地为项目启用 ltcg?

4

1 回答 1

2

原来用于构建每个 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)
}
于 2018-08-09T19:25:35.080 回答