【问题标题】:Visual Studio - How to refrain from compiling all project files every build?Visual Studio - 如何避免每次构建都编译所有项目文件?
【发布时间】:2011-05-29 01:39:51
【问题描述】:

每次我在 Visual Studio 2010 中构建我的 Visual C++ 解决方案时,整个项目(而不是整个解决方案)都会重新编译。

必须在某处有一个标志或配置才能使 VS 仅编译更改的文件 + 依赖的文件。它在哪里?

更新:

  • 我将“是 (/Gm)”设置为我的项目的配置属性\C/C++\代码生成\启用最小重建。它仍然会在 F7 上编译所有项目的文件。

【问题讨论】:

    标签: visual-studio conditional-compilation


    【解决方案1】:

    默认情况下,VS 的行为应该像您希望的那样;听起来有些事情正在发生。清理项目,并删除您的设置文件(例如 .suo / vcproj..user / 等)。这有几个原因,我见过的其中一些是:

    • 设置文件损坏
    • 系统日期/时间/时区更改混淆 vc
    • 源文件的权限问题

    【讨论】:

    • 另外:不正确的自定义构建规则,最终触及顶级标题的构建步骤
    • 是的,我可能以某种方式搞砸了我的配置,但我宁愿不从头开始。我正在寻找我错误更改的具体配置。
    • 我不相信有这样的配置。这就是 VS 的工作方式。
    • @the_mandrill - 你能详细说明一下吗?在哪里可以看到构建规则?
    • @Jonathan:不同文件类型的构建规则不同。你自己创建了这个项目吗?如果是这样,那么您可能不会有任何自定义构建规则。如果其他人创建了它们,那么它们可能存在。它们按文件显示在项目属性的“自定义构建”部分中。
    【解决方案2】:

    如果您还收到类似以下的消息:

    正在创建“.\Release\SomeLib.unsuccessfulbuild”,因为指定了“AlwaysCreate”。

    在构建时,原因可能是您的某个项目引用了磁盘上不存在的头文件(请参阅herehere)。

    第一个链接还包含一个小 C# 脚本来检查这种情况。要修复,只需从项目中删除对不存在的头文件的引用即可。

    更新

    您可能在“创建”上设置了预编译头文件。要修复,请在解决方案浏览器中右键单击您的项目并选择:properties -> C/C++ -> Precompiled Headers -> Precompiled Header。将设置从 Create 更改为 UseNot Using Precompiled Headers

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,除了我的无故开始,没有我对项目配置进行任何更改。

      我会编辑一个文件,点击构建,它会重新构建整个项目。

      经过大量艰苦的实验,我发现关闭“最小重建”可以解决问题。关闭它,我可以再次更改一个文件,它只会编译那个文件。

      奇怪的是,一旦我成功构建了一个禁用最少重建的构建,我可以重新打开它,一切都恢复正常了。

      让我认为某处的某些缓存文件可能已损坏?我曾尝试删除我所有的中间目录而不高兴,所以如果它是一个损坏的文件,我认为它不在我的项目目录中的任何位置。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        tul 的帖子对我们来说是推动的,因为我们也有一些项目,总是重新编译。结果我发现:

        • 是的,在我们的视觉 2010 项目中,选项“最小重建”不知何故被损坏了。我想,这可能会在它们从 Visual 2005 转换时发生。
        • 在特定项目中“损坏”的标志是已分配此选项,即它是粗体。这可能仅适用于某些配置,例如发布,或者对于某些架构,例如x64。它可能是粗体“否”,但仍会重新编译。

        FIX 就像接下来的步骤一样简单:

        • 在解决方案中选择一个甚至几个项目
        • 右击项目->属性
        • 选择配置:“所有配置”
        • 选择平台:“所有平台”(如果您同时拥有 x32/x64)
        • 扩展 C++ 组
        • 转到“代码生成”
        • 注意选项“启用最小重建”——很可能它会为空,因为不同的项目/配置有不同的值
        • 将此选项设置为否
        • 点击按钮应用
        • 再次将此选项设置为“从父级继承”
        • 单击按钮应用。否,您应该会看到此选项变为“否”,但以纯文本形式显示。

        完成。甚至不需要重新编译。下一次构建会更快。

        【讨论】:

          【解决方案5】:

          所以,我在我们的一个项目中遇到了同样的问题。首先,我可以通过选择来调试编译器输出:

          -> 工具 -> 选项 -> 项目和解决方案 -> 构建和运行 -> MSBuild 项目构建输出详细程度 -> 详细。

          原来有人将项目设置为始终为所有文件 (/Yc) 创建预编译头文件。我更改了下面列出的选项。

          ->配置属性->预编译头文件->使用(/Yu)

          然后我将 stdafx.cpp 的相同选项设置为 (/Yc)。因此,stdafx.cpp 的编译会创建预编译的头文件,而所有其他 .cpp 文件都使用预编译的头文件。这是默认场景,我不确定它对于 out 项目的变化。

          此外,我已更改所有编译器设置以在所有项目中保持一致,包括:

          1) 设置:C/C++ -> Precompiled Headers -> Precompiled Header -> Use (/Yu) 开关:/Yu 原因:更快的构建时间。

          2) 设置:C/C++ -> General -> Debug Information Format -> Program Database for Edit and Continue 开关:/ZI
          原因:启用编辑并继续,从而提高调试能力。

          3) 设置:C/C++ -> 代码生成 -> 启用最小重建 -> 是 开关:/Gm 原因:允许并加快增量构建,这是 /ZI 所必需的。

          希望对您有所帮助。我花了很多时间弄乱我们的项目构建设置和阅读 Stack Overflow 上的帖子,最后我想念 C#。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多