当我仅使用链接器选项/ LTCG时,为什么Visual Studio在链接器命令行中显示选项/ PGD?

问题描述:

如果以Release模式构建项目,只包含.cpp文件和int main() {},您会在Configuration Properties > Linker > Command Line中看到/PGD:"C:\Users\*****\Documents\Visual Studio\Projects\solution name\Release\project name.pgd"选项,就好像链接器应该为该项目的分析引导优化创建数据库文件一样。当我仅使用链接器选项/ LTCG时,为什么Visual Studio在链接器命令行中显示选项/ PGD?

但是,这显然是不的情况下,作为一个发布版本所使用的连接器的/LTCG选项只是/LTCG而不是/LTCG:PGINSTRUMENT。为了证实这一点,可以检查上述Release目录中是否存在任何.pgd文件。

为什么Visual Studio在项目的命令行中有这个选项(/ PGD)?

P.S.我正在使用VS2017进行这种模拟,但我相信在以前版本的Visual Studio中结果应该是一样的。

+0

也许[此MS文档](https://docs.microsoft.com/en-us/cpp/build/reference/pgd-specify-database-for-profile-guided-optimizations)文章可以有所帮助。 – Ron

+0

它或多或少地证实了我所说的话。 '使用/ LTCG:PGINSTRUMENT时,使用/ PGD指定.pgd文件的非默认名称或位置.' – Belloc

+1

此选项* always *有一个值,默认值为$(OutDir)$(TargetName).pgd。制作你展示的路径。很少需要更改设置。目前还不清楚为什么你不喜欢默认设置。 –

每个Visual Studio项目都有默认设置的/PGD选项,默认路径为$(OutDir)$(TargetName).pgd。除非您使用/LTCG:PG*选项明确启用PGO,否则此设置无效。