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++源文件 怎么只执行其中一个?