首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宏$(VCTargetsPath)究竟是在哪里定义的?

宏$(VCTargetsPath)究竟是在哪里定义的?
EN

Stack Overflow用户
提问于 2020-08-22 19:02:28
回答 1查看 3.3K关注 0票数 2

我们之前讨论过。

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仍然可以正确识别这个宏/变量。

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

那么,这个宏究竟是在哪里定义的呢?

我认为这个宏不是也不应该硬编码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-25 08:31:51

宏$(VCTargetsPath)究竟是在哪里定义的?

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

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

MSBuild实际上等同于软编码。一旦安装了MSBuild,它就以一堆dll和各种已建立的propstargets文件的形式存在。您可以在propstargets文件中以各种方式修改其属性或扩展其功能。MSBuild本身就是一个开源构建工具它并不像你想的那样不可改变。--

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

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

只是targetsprops文件在MSBuild中是嵌套和相互关联的。VCTargetsPath设置为_VCTargetsPathForToolset属性值,而_VCTargetsPathForToolset则在另一个关联的targetsprops文件中定义。

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

MSBuild中有如此多的文件,如果您想逐层搜索直到找到最终的特定值,这可能看起来有点复杂。

除了之外,VCTargetsPathMSBuild用于编译c++项目的一些工具的路径。

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

可以在xxx.vcxproj文件中写入自定义目标以输出其值。

1)将其写入xxx.vcxproj文件:

代码语言:javascript
运行
复制
<Target Name="test123" AfterTargets="Build">
        <Message Importance="high" Text="$(VCTargetsPath)"></Message>
</Target>

2)然后重新构建项目,您可以看到以下内容:

It是MSBuild系统定义的路径。如果您很容易更改它,它将导致项目无法编译,除非您有一组类似于自定义的系统(类似于MSBuild )来构建C++项目,然后将其放入新路径,让新路径覆盖VCTargetsPath属性。

以及,我很好奇您为什么要找到最低的VCTargetPath值。如果你想知道它的原理,上面的答案解释它。

如果要重写和的值,可以直接创建一个名为VCTargetsPath的环境系统变量,然后将其值设置为新的值。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63540048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档