gpt4 book ai didi

visual-c++ - $(TargetPath) 未在加载宏时进行评估?

转载 作者:行者123 更新时间:2023-12-01 04:43:20 26 4
gpt4 key购买 nike

我有一个文件 custom.props我在这里定义了一些要在项目中使用的宏。在这个例子中,我有这个:

<VST2_32_COMMAND_ARGS>$(TargetPath) /noload /nosave /noexc /noft</VST2_32_COMMAND_ARGS>

当我加载项目并查看属性、调试、命令参数时,我可以访问该宏 VST2_32_COMMAND_ARGS .但字符串被评估为 /noload /nosave /noexc /noft
基本上, $(TargetPath)不被评估。就我而言,该路径指向一个 DLL,所以它应该是这样的:
"C:\Program Files (x86)\VstPlugins\Plug\vst2\Win32\bin\MyPlug.dll" /noload /nosave /noexc /noft

但它是空的。我怎么能修好呢?也试过这个:
<VST2_32_COMMAND_ARGS>"$(TargetPath)" /noload /nosave /noexc /noft</VST2_32_COMMAND_ARGS>

但结果是:
"" /noload /nosave /noexc /noft

最佳答案

$(TargetPath) not evalutated on loading macro?



要解决此问题,您应该导入您的 custom.props文件 导入文件 Microsoft.Cpp.targets :
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Import Project="Custom.props" />

那是因为 Macros for Build Commands and Properties 的值由文件设置 Microsoft.Cpp.Current.targets :
  <Target Name="SetUserMacroEnvironmentVariables" 
Condition="'@(BuildMacro)' != '' and '$(DesignTimeBuild)' != 'true'">

<SetEnv Condition="'%(BuildMacro.EnvironmentVariable)' == 'true'"
Name ="@(BuildMacro)"
Value ="%(BuildMacro.Value)"
Prefix ="false">
<Output TaskParameter="OutputEnvironmentVariable" PropertyName="%(BuildMacro.Identity)"/>
</SetEnv>

</Target>

和文件 Microsoft.Cpp.Current.targets由文件 Microsoft.Cpp.targets 导入:
 <Import Condition="'$(_Redirect)' != 'true'" Project="$(VCTargetsPath)\Microsoft.Cpp.Current.targets" />

所以 如果在导入文件之前调用自定义文件中的某个宏 Microsoft.Cpp.targets , MSBuild 无法获取宏的值。

你可以得到那些 .targets文件在以下路径:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets

验证自定义值 VST2_32_COMMAND_ARGS ,我添加了一个简单的目标来输出该值。所以你的项目文件应该是这样的:
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

<ImportGroup Label="ExtensionTargets">
</ImportGroup>

<Import Project="Custom.props" />

<Target Name="TestByCustom" AfterTargets="Build">
<Message Text="$(VST2_32_COMMAND_ARGS)"></Message>
</Target>

构建完成后,我们可以得到值 $(TargetPath) :

enter image description here

我的 custom.props 文件:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VST2_32_COMMAND_ARGS>"$(TargetPath)" /noload /nosave /noexc /noft</VST2_32_COMMAND_ARGS>
</PropertyGroup>

</Project>

希望这可以帮助。

关于visual-c++ - $(TargetPath) 未在加载宏时进行评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862297/

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