qmake 项目有时是使用用 ltcg 编译的 Qt 构建的。由于 Qt 的 ltcg 构建设置不会自动传播到使用给定 Qt 安装的项目的设置,MSVC 链接器会浪费时间并发出以下警告:
找到 MSIL .netmodule 或使用 /GL 编译的模块;重新启动与 /LTCG 的链接;将 /LTCG 添加到链接命令行以提高链接器性能
如果构建的 Qt 也启用了 ltcg,有没有办法有条件地为项目启用 ltcg?
qmake 项目有时是使用用 ltcg 编译的 Qt 构建的。由于 Qt 的 ltcg 构建设置不会自动传播到使用给定 Qt 安装的项目的设置,MSVC 链接器会浪费时间并发出以下警告:
找到 MSIL .netmodule 或使用 /GL 编译的模块;重新启动与 /LTCG 的链接;将 /LTCG 添加到链接命令行以提高链接器性能
如果构建的 Qt 也启用了 ltcg,有没有办法有条件地为项目启用 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)
}