Visual Studio:编译每个平台和配置上的模块列表

Hei*_*bug 8 c++ automation compilation visual-studio visual-studio-2015

我正在开展一个庞大的C++项目,针对每个平台的多个配置.

由于编译时间较长,在每个平台上构建整个项目以测试更改是否成功编译,不是一个选项.

我通常做的是编译我在不同的平台/配置组合上修改的单个cpp模块.我想自动化这个过程,使用脚本,VS扩展,无论如何,我愿意评估不同的选项.

我需要的是获取cpp文件列表并为每个平台和每个配置编译每个文件(基本上遍历配置管理器的所有组合).

这可能吗?关于如何处理问题的任何好建议?


编辑:

我知道这远远不是一个完美的解决方案,并且只会发现一部分错误.我仍然必须面对链接错误,其他cpp单元上的编译器错误取决于修改的标头,等等.

我也没有任何机会修改当前的构建系统或项目生成.

我最感兴趣的是本地解决方案,以减少可能出现的问题并面对庞大的建设时间过程.


EDIT2

我们有一个构建系统.对于我的个人工作流程,这必须被视为预构建系统优化.

原因:

触发构建系统作业需要时间.这将是最后一步,但不是花费数小时等待,并且可能稍后发现给定平台上针对特定配置的给定编译器引发错误,尽可能多地预测这些发现将更有效.

当前手动工作流程

  1. 打开我修改过的每个cpp文件
  2. 将每个cpp文件编译为一个单元(不构建项目.在VS Build-> Compile上)
  3. 更改平台和/或配置,然后再次重新执行第2点.

这是我想要优化的手动工作流程.

jpo*_*o38 2

我建议你“简单地”编写一个脚本来执行此操作(例如使用Python,它对于这种情况非常强大)

你可以:

  • GlobalSection(SolutionConfigurationPlatforms)解析 .sln 文件以提取配置、平台(条目)和项目(Project条目)列表
  • 如果需要,您可以解析每个项目以查找源文件列表(这比解析 .sln 更容易,因为 vcxproj 文件位于 xml 中)。查找ClCompilexml 节点以提取 .cpp 文件列表。
  • 然后您可以确定哪些项目需要重新编译某些文件(获取修改文件的列表作为脚本输入参数或基于时间戳检查)

最后,要重建,您有两种选择:

  • 调用“msbuild”重新编译整个项目(vcxproj)(例如 msbuild project.vcxproj /p:Configuration=Debug;TargetFrameworkVersion=v3.5
  • 您还可以重新编译单个文件 ( cl simple.cpp)。为此,您需要知道什么是cl构建选项,以确保您以与 Visual Studio 完全相同的方式编译文件。如果您之前完整构建了解决方案(这可能是脚本正常工作的要求),那么您应该能够从 Visual Studio 日志(在目标文件夹内)找到该解决方案。在我的解决方案中,我可以为每个项目(vcxproj 文件)找到每个配置的构建日志(在 中),该文件报告用于编译项目每个文件的%OUTPUT_DIR%\lib\%libname%\%libname%.dir\%configuration%\%libname%.tlog\CL.command.1.tlog确切参数。cl然后,您可以手动调用cl命令,这应该最终以与 Visual Studio 相同的方式重新编译文件。

此外,您可以在 Visual Studio 解决方案中添加一个项目,该项目会将此脚本作为自定义命令触发。

这样的脚本应该能够识别哪些项目需要重建并重建它们。