gpt4 book ai didi

c++ - 宏 $(VCTargetsPath) 到底在哪里定义的?

转载 作者:行者123 更新时间:2023-12-05 04:59:21 27 4
gpt4 key购买 nike

我们之前讨论过。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/e04e7791-c0c4-4598-b900-310878f5af45/how-can-i-locate-and-change-the-vctargetspath-variable?forum=msbuild

搜索 .props 文件数小时后,.prop 和 .targets 中的所有 $(VCTargetsPath) 都被删除,但 Visual Studio 仍然可以正确识别此宏/变量。

通过修改 Microsoft.Cpp.ToolsetLocation.props,可以修改 $(VCTargetsPath),因此 VS 无法再创建新项目。

那么,这个宏到底定义在哪里?

我相信这个宏不是也不应该被硬编码。

最佳答案

Where exactly is macro $(VCTargetsPath) defined?

实际上VCTargetsPath属性在 MSBuild 系统中定义 propstargets MSBuild 文件夹 ( C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild ) 下的文件。并且文件是嵌套的并且相互关联。 因此,各个属性的值在逐级文件中相互引用,VCTargetsPath的值也不异常(exception)。

============================================= ===========================

MSBuild其实相当于软编码。一旦安装了 MSBuild,它就会以一堆 dll 和各种已建立的形式存在 propstargets文件。您可以在 props 中以各种方式修改其属性或扩展其功能。或 targets文件。 MSBuild 本身是一个 open source build tool . 它并不像你想的那样一成不变。

============================================= ===========================

VCTargetsPath实际上是在名为 Microsoft.Cpp.ToolsetLocation.props 的 msbuild props 文件中定义的正如你所说。

enter image description here

只是各种targetsprops MSBuild 中的文件是嵌套且相互关联的。 VCTargetsPath被设置为 _VCTargetsPathForToolset 的值属性(property)同时_VCTargetsPathForToolset在另一个关联中定义 targetsprops文件。

一般,使用<import projects="xxxx\xxx.props or targets" />在当前 targets 中嵌入另一个文件或 props文件。

而且MSBuild中的文件非常多,如果要逐层搜索直到找到最终的具体值,可能会显得有些复杂。

此外VCTargetsPathMSBuild编译c++项目时使用的一些工具的路径。

VS2019中的默认值为C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160 .

您可以在 xxx.vcxproj 中编写自定义目标文件输出它的值。

1)xxx.vcxproj中写这个文件:

<Target Name="test123" AfterTargets="Build">
<Message Importance="high" Text="$(VCTargetsPath)"></Message>
</Target>

2) 然后重建你的项目,你可以看到这个:

enter image description here

MSBuild系统定义的路径。如果随便更改,会导致工程编译失败,除非你有一套类似于MSBuild的自定义系统来构建C++工程,然后放到新的路径下,让新路径覆盖 VCTargetsPath属性(property)。

另外,我很好奇你为什么要找最低的VCTargetPath值(value)。如果你想知道它的原理,上面的答案已经说明了。

而且如果你想覆盖它的值,你可以创建一个名为VCTargetsPath环境系统变量直接,然后将其值设置为一个新值。

重启 VS 以启用这样的新值。这比修改 targets 容易得多文件。

关于c++ - 宏 $(VCTargetsPath) 到底在哪里定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63540048/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com