问题描述
对于自定义生成目标,我希望具有在ClCompile目标中调用的正确版本的cl.exe的完整路径。
从https://bugs.mysql.com/bug.php?id=101342中,我得到的是%VCINSTALLDIR%\bin\x86\Hostx86\cl.exe
或%VCINSTALLDIR%\bin\x64\Hostx64\cl.exe
,但是我不想为x84与x64逻辑编写程序。
在VCTargets \ Microsoft.CppCommon.Targets中,我发现属性ToolExe和ToolPath被设置为$(CLToolExe)和$(CLToolPath)。
重写这些属性对我来说也成功地更改了编译器的路径,因此,正确的是这些是属性名称。 retrieve path to cl.exe
但是,当我尝试在自定义目标exec类中打印%(CL.ToolPath)或$(CLToolPath)时,它什么都不打印。我还查看了Visual Studio,找不到它的设置位置。
是否存在可以提供cl.exe完整路径的变量,或者有什么方法可以在自定义目标中打印CL Task的属性ToolPath?
解决方法
1)如果您已经使用$(CLToolExe)
和$(CLToolPath)
来设置新的cl.exe
,然后想要获取其完整路径,则应该使用此$(CLToolPath)$(CLToolExe)
而不是%(CL.ToolPath)
来获取新值(没有这样的方法)。
这是我的测试结果:
实际上,您可以直接在xxx.csporj
文件下而不是Microsoft.CppCommon.Targets
文件下覆盖这些属性,并且在构建项目时,它将使用新的{{1 }}。
然后,我使用自定义目标获取值:
cl.exe
2)如果您没有更改为新值,而是使用默认的<Target Name="test123" AfterTargets="ClCompile">
<Exec Command="$(CLToolPath)$(CLToolExe)" />
<Message Importance="high" Text="$(CLToolPath)$(CLToolExe)"></Message>
</Target>
而未做任何更改,则应使用cl.exe
来获取默认值。>
$(ClCompilerPath)
注意: <Target Name="test123" AfterTargets="ClCompile">
<Message Importance="high" Text="$(ClCompilerPath)"></Message>
</Target>
无法获得$(ClCompilerPath)
的新值,因为它们没有关联,只能获得默认值。