$(TargetPath)在加载宏时没有评估?

问题描述 投票:4回答:1

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

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

当我加载项目,并查看属性,调试,命令参数,我可以访问该宏VST2_32_COMMAND_ARGS。但是字符串被评估为/noload /nosave /noexc /noft

基本上,没有评估qazxsw poi。在我的例子中,该路径指向一个DLL,所以它应该像这样的东西:

$(TargetPath)

但它空洞。我该怎么办呢?还试过这个:

"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>
visual-c++ msbuild visual-studio-2017 visual-studio-macros
1个回答
1
投票

$(TargetPath)在加载宏时没有评估?

要解决此问题,您应该在导入文件"" /noload /nosave /noexc /noft 后导入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" /> 之前调用自定义文件中的某个宏,则MSBuild无法获取宏的值。

您可以通过以下路径获取这些Microsoft.Cpp.targets文件:

.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)

我的custom.props文件:

enter image description here

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.