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

C++ 如何在vcxproj文件中打印完整的cl.exe路径?,c++,visual-studio,msbuild,msbuild-task,C++,Visual Studio,Msbuild,Msbuild Task,对于自定义构建目标,我希望具有在ClCompile目标中调用的cl.exe的正确版本的完整路径 从中,我得到的是%vcsinstalldir%\bin\x86\Hostx86\cl.exe或%vcsinstalldir%\bin\x64\Hostx64\cl.exe,但我不想为x84 vs x64逻辑编写程序 在VCTargets\Microsoft.cppcomon.Targets中,我发现有属性ToolExe和ToolPath被设置为$(CLToolExe)和$(CLToolPath) 重写

对于自定义构建目标,我希望具有在ClCompile目标中调用的cl.exe的正确版本的完整路径

从中,我得到的是
%vcsinstalldir%\bin\x86\Hostx86\cl.exe
%vcsinstalldir%\bin\x64\Hostx64\cl.exe
,但我不想为x84 vs x64逻辑编写程序

在VCTargets\Microsoft.cppcomon.Targets中,我发现有属性ToolExe和ToolPath被设置为$(CLToolExe)和$(CLToolPath)

重写这些属性也为我成功地更改了编译器的路径,因此这些属性名称是正确的

但是,当我尝试在自定义目标exec类中打印%(CL.ToolPath)或$(CLToolPath)时,它不会打印任何内容。我也在VisualStudio中查找,找不到它的设置位置

是否有一个变量可以提供cl.exe的完整路径,或者我是否可以在自定义目标中打印cl任务的属性ToolPath?

1)如果您已经使用
$(CLToolPath)
$(CLToolPath)
来设置新的
cl.exe
,然后想要获得它的完整路径,您应该使用此
$(CLToolPath)$(CLToolExe)
来获取新值,而不是
%(CL.ToolPath)
(没有这样的方法)

这是我的测试结果:

实际上,您可以直接在
xxx.csporj
文件下覆盖这些属性,而不是在
Microsoft.cppcomon.Targets
文件中覆盖,并且在构建项目时,它将使用新的
cl.exe

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

<Target Name="test123" AfterTargets="ClCompile">
        <Exec Command="$(CLToolPath)$(CLToolExe)" />
        <Message Importance="high" Text="$(CLToolPath)$(CLToolExe)"></Message>
</Target>


注意
$(ClCompilerPath)
无法获取
$(CLToolPath)$(CLToolExe)
的新值,因为它们不相关,只能获取默认值。

您好,关于此问题的任何更新?$(ClCompilerPath)不会为我打印任何内容。我尝试了这个目标。你的项目类型是什么?您是否错过了
xxx.vcxproj
文件中的一些系统
目标
道具
文件?您能与我们分享您的
xxx.vcxproj
文件吗?正常的C++项目由C.exe编译,属性<代码> ClCompilerPath < /C> >是系统属性,它定义了<代码> C.exe < /C> >的完整路径。它不应该是空的。此外,如果创建一个新的默认C++项目,它是否打印属性“代码> ClCompilerPath < /代码>?
 <Target Name="test123" AfterTargets="ClCompile">       
       <Message Importance="high" Text="$(ClCompilerPath)"></Message>
 </Target>