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

Posted

技术标签:

【中文标题】当我仅使用链接器选项 /LTCG 时,为啥 Visual Studio 会在链接器命令行中显示选项 /PGD?【英文标题】:Why does Visual Studio show the option /PGD in the linker command line when I use just the linker option /LTCG?当我仅使用链接器选项 /LTCG 时,为什么 Visual Studio 会在链接器命令行中显示选项 /PGD? 【发布时间】:2017-09-02 14:07:51 【问题描述】:

如果您在Release 模式下构建一个项目,其中只包含一个带有int main() .cpp 文件,您将在Configuration Properties > Linker > Command Line 中看到选项/PGD:"C:\Users\*****\Documents\Visual Studio\Projects\solution name\Release\project name.pgd",就好像链接器应该为此项目的配置文件引导优化。

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

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

附:我正在使用 VS2017 进行此模拟,但我相信结果应该与以前版本的 Visual Studio 相同。

【问题讨论】:

也许this MS docs 的文章会有所帮助。 它或多或少地证实了我所说的。 When using /LTCG:PGINSTRUMENT, use /PGD to specify a nondefault name or location for the .pgd file. 这个选项always有一个值,默认是$(OutDir)$(TargetName).pgd。产生你展示的路径。很少需要更改设置。目前尚不清楚您为什么不喜欢默认设置。 请给出VS版本号。 @HansPassant 这似乎是答案。我没有意识到默认值是 $(OutDir)$(TargetName).pgd。谢谢。 【参考方案1】:

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

【讨论】:

以上是关于当我仅使用链接器选项 /LTCG 时,为啥 Visual Studio 会在链接器命令行中显示选项 /PGD?的主要内容,如果未能解决你的问题,请参考以下文章

具有分层布局的Vis.js垂直节点位置

Visual Studio 中的 /GL 和 /LTCG 有啥区别

C++ - 代码在 Debug 中编译,但不在 Release 中

在 qt5 中设置链接器选项

当我仅使用脚本名称在 Windows 上运行 Python 脚本时无法重定向输出

为啥当我使用 tkinter 配置选项时这个标签没有改变