C++ ClCompile项也是一项任务吗?

C++ ClCompile项也是一项任务吗?,c++,visual-studio,visual-c++,msbuild,C++,Visual Studio,Visual C++,Msbuild,我试图理解这里的可视化cpp项目文档() 调试 Win32 释放 Win32 应用 v120 我推测ClCompile是一个项,因为它嵌套在ItemGroup标记下,而且似乎要编译的文件在ClCompile标记中引用。在项目的文档页面上,它声明项目是构建系统的输入。我看不到上面有一个任务需要这些ClCompile项并对它们进行编译,编译是如何实现的?ClCompile项也是任务吗?是的,ClCompile实际上运行CLTask任务类。我怀疑(虽然不确定)他们是这样做的,这样他们就可以同时拥有

我试图理解这里的可视化cpp项目文档()


调试
Win32
释放
Win32
应用
v120

我推测ClCompile是一个项,因为它嵌套在ItemGroup标记下,而且似乎要编译的文件在ClCompile标记中引用。在项目的文档页面上,它声明项目是构建系统的输入。我看不到上面有一个任务需要这些ClCompile项并对它们进行编译,编译是如何实现的?ClCompile项也是任务吗?

是的,ClCompile实际上运行CLTask任务类。我怀疑(虽然不确定)他们是这样做的,这样他们就可以同时拥有CLCompile和CLInclude,而不必为它们各自编写任务实现。我不确定在程序集或组件中找到的名称空间,与纯.NET语言的任务不同,C++任务不在.NET库文档中。

我看不到上面有一个任务需要这些ClCompile项并对它们进行编译,编译是如何实现的?ClCompile项也是任务吗

搜索以下路径下
VCTargets
文件夹中的所有
.targets
.props
文件后:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets
我们可以在
Microsoft.cppcomon.targets
文件中找到以下代码片段:

 <Target Name="ClCompile"
          Condition="'@(ClCompile)' != ''"
          DependsOnTargets="SelectClCompile">

    <PropertyGroup>
      <CLToolArchitecture Condition="'$(CLToolArchitecture)' == ''">$(VCToolArchitecture)</CLToolArchitecture>
      <CLDeleteOutputOnExecute Condition="'$(CLDeleteOutputOnExecute)' == ''">true</CLDeleteOutputOnExecute>
    </PropertyGroup>

    <ItemGroup>
      <ClNoDependencies Condition="'@(ClNoDependencies)' == '' and '%(ClInclude.NoDependency)' == 'true'" Include="@(ClInclude)"/>
      <ClNoDependencies Condition="'$(NoDependencies)' != ''" Include="$(NoDependencies)" />
    </ItemGroup>

    ...

    <OnError Condition="'$(OnXamlPreCompileErrorTarget)' != ''" ExecuteTargets="$(OnXamlPreCompileErrorTarget)" />
  </Target>

$(VCToolArchitecture)
真的
...
<> >代码> CulcGue/Cuth>应该是一个目标,用于执行VisualC++编译器工具,<代码> C.exe < /Cudio>编译C/C++源文件。这就是它不在MSBuild项中的原因


有关更多详细信息,请参阅。

它是一个目标,在Microsoft.cppcomon.targets中定义。它所做的最相关的事情是执行CL任务。IDE也关注它,就像它关注ClInclude一样,这就是它如何构建在解决方案资源管理器窗口中可见的项目树。要弄清楚Microsoft.Cpp.Targets是如何运行的,您可能会失去几束头发。我认为官方文档()确实应该提到ClCompile是一个目标,因为它嵌套在ItemGroup下,这使它看起来像是一个item@aileronajay是的,应该是。但是,这个文档用来讨论如何通过MSBuw创建VisualC++项目,它不能解释一些深入但很少被注意到的东西。当有人注意到它时,就像你一样。我们将尽最大努力让你明白这一点。当然,我也会尝试建议MS团队根据您的意愿更新此文档。如果上面的答案解决了您的疑问,您可以接受它作为答案,这对阅读此帖子的其他社区成员是有益的。
 <Target Name="ClCompile"
          Condition="'@(ClCompile)' != ''"
          DependsOnTargets="SelectClCompile">

    <PropertyGroup>
      <CLToolArchitecture Condition="'$(CLToolArchitecture)' == ''">$(VCToolArchitecture)</CLToolArchitecture>
      <CLDeleteOutputOnExecute Condition="'$(CLDeleteOutputOnExecute)' == ''">true</CLDeleteOutputOnExecute>
    </PropertyGroup>

    <ItemGroup>
      <ClNoDependencies Condition="'@(ClNoDependencies)' == '' and '%(ClInclude.NoDependency)' == 'true'" Include="@(ClInclude)"/>
      <ClNoDependencies Condition="'$(NoDependencies)' != ''" Include="$(NoDependencies)" />
    </ItemGroup>

    ...

    <OnError Condition="'$(OnXamlPreCompileErrorTarget)' != ''" ExecuteTargets="$(OnXamlPreCompileErrorTarget)" />
  </Target>