如何在vcxproj文件中打印完整的cl.exe路径?

问题描述

对于自定义生成目标,我希望具有在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 }}。

CLToolExe

然后,我使用自定义目标获取值:

cl.exe

enter image description here

2)如果您没有更改为新值,而是使用默认的<Target Name="test123" AfterTargets="ClCompile"> <Exec Command="$(CLToolPath)$(CLToolExe)" /> <Message Importance="high" Text="$(CLToolPath)$(CLToolExe)"></Message> </Target> 而未做任何更改,则应使用cl.exe来获取默认值。>

$(ClCompilerPath)

enter image description here

注意 <Target Name="test123" AfterTargets="ClCompile"> <Message Importance="high" Text="$(ClCompilerPath)"></Message> </Target> 无法获得$(ClCompilerPath)的新值,因为它们没有关联,只能获得默认值。