繁体   English   中英

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

[英]Visual Studio : compile list of modules on each platform and configuration

我正在做一个庞大的C++项目,目标是许多平台,每个平台都有几种配置。

由于编译时间长,因此不能选择在每个平台上构建整个项目以测试更改是否可以成功编译。

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

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

这可能吗? 关于如何解决该问题有什么好的建议吗?


编辑:

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

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

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


编辑2

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

原因:

触发构建系统作业需要时间。 这将是最后一步,而不是花费大量时间等待,以后可能会发现给定平台上针对特定配置的给定编译器会引发错误,因此尽可能有效地预测这些发现将更为有效。

当前的手动工作流程:

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

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

我建议您“简单地”编写一个脚本来执行此操作(例如,使用Python,这种功能非常强大)

你可以:

  • 解析.sln文件以提取配置,平台( GlobalSection(SolutionConfigurationPlatforms)条目)和项目( Project条目)的列表
  • 如果需要,您可以解析每个项目以查找源文件列表(这比解析.sln更容易,因为vcxproj文件位于xml中)。 查找ClCompile xml节点以提取.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解决方案中添加一个项目,该项目将以自定义命令的形式触发该脚本。

这样的脚本应该能够确定必须重建哪些项目并对其进行重建。

这是一个非常普遍的要求,从来没有这样解决过。 您提出的建议并非完全不可能,但是实施起来肯定会非常痛苦。 您正在忽略修改.h文件时应执行的操作,这可能会迫使重新编译一堆.cpp文件。 而且您没有考虑链接器错误。 尽管您会发现.cpp文件,但发现#include文件依赖关系非常棘手。 您无法从项目或生成文件中获取它们。 使用/ showIncludes进行编译并解析构建跟踪文件是需要的。 没有现成的afaik。

不要这样做,您会后悔的。 使用每个人都使用的解决方案:您需要构建服务器。 最好具有连续集成功能,以便服务器在签入代码更改后立即启动所有目标平台的构建。 本次Q + A讨论了许多可供选择的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM