当我仅使用链接器选项 /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?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 中的 /GL 和 /LTCG 有啥区别
C++ - 代码在 Debug 中编译,但不在 Release 中