visual-c – $(TargetPath)在加载宏时没有评估?

visual-c – $(TargetPath)在加载宏时没有评估?,第1张

概述我有一个文件custom.props,我定义了一些在项目中使用的宏.在这个例子中,我是这样的: <VST2_32_COMMAND_ARGS>$(TargetPath) /noload /nosave /noexc /noft</VST2_32_COMMAND_ARGS> 当我加载项目,并查看属性,调试,命令参数,我可以访问该宏VST2_32_COMMAND_ARGS.但是字符串被评估为/ nolo 我有一个文件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?

要解决此问题,您应该在导入文件Microsoft.Cpp.targets后导入custom.props文件:

<import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />   <import Project="Custom.props" />

那是因为文件Microsoft.Cpp.Current.targets设置的值为Macros for Build Commands and Properties:

<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 Studio17\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)的值:

我的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)在加载宏时没有评估?全部内容,希望文章能够帮你解决visual-c – $(TargetPath)在加载宏时没有评估?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1229051.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存