我试图在这里理解visual cpp项目文档(https://docs.microsoft.com/en-us/cpp/build/walkthrough-using-msbuild-to-create-a-visual-cpp-project)。
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v120</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>
我认为ClCompile是一个项目,因为它嵌套在ItemGroup标签下,似乎在ClCompile标签中引用了要编译的文件。在项目的文档页面https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-items上,它指出Items是构建系统的输入。我没有看到上面的任务采取这些ClCompile项目并编译它们,如何实现编译? ClCompile项目也是任务吗?
答案 0 :(得分:1)
我没有看到上面的任务接受这些ClCompile项目并编译它们,如何实现编译? ClCompile项目也是任务吗?
在以下路径中搜索.targets
文件夹中的所有.props
和VCTargets
个文件后:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets
我们可以在Microsoft.CppCommon.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>
因此ClCompile
应该是一个目标,用于执行Visual C ++编译器工具cl.exe
来编译C / C ++源文件。这就是它不在MSBuild项中的原因。
有关详细信息,请参阅MSBuild (Visual C++) Overview。
答案 1 :(得分:0)
是的,CLCompile实际上运行了CLTask任务类。我怀疑(虽然不确定)他们这样做,所以他们可以同时拥有CLCompile和CLInclude,而无需为每个人编写任务实现。我不确定在什么名称空间或程序集中,与纯.net语言的任务不同,c ++任务不在.net库文档中。