Visual Studio C++ 项目文件 CustomBuild 任务:按文件扩展名过滤 OutputItemType

Posted

技术标签:

【中文标题】Visual Studio C++ 项目文件 CustomBuild 任务:按文件扩展名过滤 OutputItemType【英文标题】:Visual Studio C++ Project File CustomBuild Task: Filter OutputItemType by File Extension 【发布时间】:2020-02-09 05:48:56 【问题描述】:

我在 Visual Studio 2019 C++ 项目文件 (.vcxproj) 中定义了一个自定义构建步骤,该文件生成 .h.cc文件。有一个名为 “将输出添加到项目类型” 的自定义构建工具选项,我可以在其中选择 “C/C++ 标头”“C/C++”之一编译器”。有没有办法编辑生成的项目文件,以便将 .cc 文件添加为 "C/C++ compiler".h文件被添加为 "C/C++ header"?

我的预期解决方法是从自定义构建工具输出列表中删除生成的 .h 文件。该变通方法的缺点是,如果 .h 文件之一丢失或陈旧,则构建将失败。我希望找到解决这个缺陷的解决方案。

以下说明了我在 .vcxproj 文件中所做的尝试:

<OutputItemType Condition="'%(Extension)'=='.cc'">ClCompile</OutputItemType>

【问题讨论】:

你把这条线放在哪里了?在属性组、ItemGroup、ItemDefinitionGroup 中还是在一个 Item 中?您能否分享一些有关您在 vcxproj 中的自定义构建步骤脚本的更多详细信息? 【参考方案1】:

不确定您如何定义Custom Build Step。但自定义构建步骤并不是唯一的方法。

对于 C++ 项目,msbuild 提供自定义构建工具、自定义构建步骤、构建事件和custom targets。您可以通过此脚本实现相同的要求:

  <Target Name="CustomTarget" BeforeTargets="PrepareForBuild">
    <Exec Command="xx.exe ..."/> <!--Call the tool.exe to generate files somewhere. We can save them in temp folder.--> 
    <Copy SourceFiles="xxx" DestinationFolder="xxx"/> <!--Use copy task to copy the generated files to project folder-->
    <ItemGroup>
      <ClCompile Include="Path of Temp folder\*.cc" />
    </ItemGroup>
  </Target>

看到this,我查了一些相关文件,确认OutputItemType是关于ProjectReference的东西。我不确定这个语法是否支持其他项目。

【讨论】:

以上是关于Visual Studio C++ 项目文件 CustomBuild 任务:按文件扩展名过滤 OutputItemType的主要内容,如果未能解决你的问题,请参考以下文章

如何在visual studio2008中创建,编译和运行C++程序,

visual studio 2010 一个解决方案里有多个c++源文件 怎么只执行其中一个?

如何用visual studio2012编c++程序?

C++ 项目依赖问题 Visual Studio 2005

在 Visual Studio 中构建 C++ 项目不会创建任何文件

Visual Studio/CMake 中未解析的外部符号 cuda_library::foo(int)