gpt4 book ai didi

c++ - Visual Studio : compile list of modules on each platform and configuration

转载 作者:可可西里 更新时间:2023-11-01 17:55:37 26 4
gpt4 key购买 nike

我正在从事一个巨大的 C++ 项目,该项目针对许多平台,每个平台都有多种配置。

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

我通常做的是编译我在不同平台/配置组合上修改的单个 cpp 模块。我想自动执行此过程,无论是使用脚本、VS 扩展还是其他任何方式,我都愿意评估不同的选项。

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

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


编辑:

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

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

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


编辑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 解决方案中添加一个项目,将此脚本作为自定义命令触发。

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

关于c++ - Visual Studio : compile list of modules on each platform and configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42055538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com