加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:22:46 所属栏目:百科 来源:网络整理
导读:我有一个文件custom.props,我定义了一些在项目中使用的宏.在这个例子中,我是这样的: VST2_32_COMMAND_ARGS$(TargetPath) /noload /nosave /noexc /noft/VST2_32_COMMAND_ARGS 当我加载项目,并查看属性,调试,命令参数,我可以访问该宏VST2_32_COMMAND_ARGS.但
我有一个文件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)VstPluginsPlugvst2Win32binMyPlug.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 Studio2017EnterpriseCommon7IDEVCVCTargets

为了验证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>

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读