gpt4 book ai didi

c++ - 如何访问 MsBuild 中 节点外的项目元数据?

转载 作者:行者123 更新时间:2023-11-28 06:30:58 25 4
gpt4 key购买 nike

我正在尝试制作 .targets我的 NuGet 包的文件,它将链接到正确的 .lib文件取决于项目的 C++ 运行时库。 This answer建议使用 %(ClCompile.RuntimeLibrary)为此的元数据。但似乎无法在 <Target> 之外访问元数据节点!并在 <ItemDefinitionGroup> 中添加了库依赖项根下的节点 <Project>节点。

这是 SSCCE:

<?xml version="1.0" encoding="us-ascii"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="main.cpp">
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
</ItemGroup>
<PropertyGroup>
<RuntimeLibrary>%(ClCompile.RuntimeLibrary)</RuntimeLibrary>
</PropertyGroup>
<Target Name="Build">
<Message Text="Property = $(RuntimeLibrary)" Importance="high" />
<Message Text="Metadata = %(ClCompile.RuntimeLibrary)" Importance="high" />
</Target>
</Project>

使用 MsBuild 运行它会产生:

Property = %(ClCompile.RuntimeLibrary)
Metadata = MultiThreadedDebugDLL

同样的说法%(ClCompile.RuntimeLibrary)<Target> 中使用时扩展为值节点,但在 <PropertyGroup> 中使用时不会外部节点 <Target>节点。

那么我如何访问运行时库元数据值以添加对正确库的引用?

更新:建议但不令人满意的解决方法是定义 RuntimeLibrary像下面这样:

<RuntimeLibrary>@(ClCompile->'%(RuntimeLibrary)')</RuntimeLibrary>

初始脚本的输出在这种情况下是正确的,但是我的任务仍然没有解决,因为我想在一个条件下使用这个属性。因此,如果我添加以下内容:

<PropertyGroup Condition="'$(RuntimeLibrary)'=='MultiThreadedDebugDLL'">
<TestProp>defined</TestProp>
</PropertyGroup>
...
<Message Text="TestProp = $(TestProp)" Importance="high" />

TestProp未定义。我如何使这项工作符合条件?

最佳答案

请尝试以下操作:

  <PropertyGroup>
<RuntimeLibrary>@(ClCompile->'%(RuntimeLibrary)')</RuntimeLibrary>
</PropertyGroup>

使用 @ 符号可以引用项目列表。

还有an example on StackOverflow .

关于c++ - 如何访问 MsBuild 中 <Target> 节点外的项目元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584302/

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