【问题标题】:How to set up MS Visual Studio 2005 project dependencies for efficient compiling (c++)?如何设置 MS Visual Studio 2005 项目依赖项以进行高效编译 (c++)?
【发布时间】:2010-10-24 04:22:49
【问题描述】:

如何设置 MS Visual Studio 2005 项目依赖项,以便在更高级别的项目中进行更改不会强制重新编译它所依赖的所有其他项目。

如果我有 5 个 dll 项目,它们以各种方式相关...在“项目”->“依赖项”下,我已经确定了下一个项目,但只下降了一层。 当我对较高项目进行小幅更改时,选择“Build”->“Build myLib”,较低项目也会重新编译...如果我指定所有依赖项,那么所有依赖项目也会重新编译...这是'对吧?

如果我删除显式依赖项,则不会重建较低的项目,即使它应该是(正如我所期望的那样)。

如果我有多个依赖级别(A 依赖 B 依赖 C 等)怎么办?

【问题讨论】:

  • 听起来你有错误的依赖关系?如果 A 依赖于 B 而你改变了 A,那么只有 A 需要重新编译。如果你改变了B,那么需要重新编译B,然后再编译A。
  • 是的,这正是我所期望的,但我看到的恰恰相反......

标签: c++ visual-c++ ide visual-studio-2005 dependencies


【解决方案1】:

如果我有多个依赖级别(A 依赖 B 依赖 C 等)怎么办?

从下拉列表中选择项目 A,添加 B 作为依赖项。同样,对于 B,选择 C ​​作为依赖项。

【讨论】:

  • 这就是我现在的样子...当我在较高的项目中工作时,即使我没有更改它,它也会不断重新编译较低的依赖项。
  • 也许您的时钟是在您之前进行一些更改时的未来。尝试从源代码管理系统重新签出您的项目,或者在某处找到一个命令来重置文件上的所有日期。
  • 我认为所有时间戳都应该没问题...我可以重建整个解决方案,更改项目 A,然后点击构建项目 A,项目 B 似乎也被编译。 (至少,在编译 B 时输出的相同警告会再次输出。
【解决方案2】:

如何设置 MS Visual Studio 2005 项目依赖关系使得 更高级别项目的变化 不强制重新编译所有 它依赖的其他项目。

我想你的意思是:

如何设置 MS Visual Studio 2005 项目依赖关系使得 更高级别项目的变化 不强制重新编译所有 可能依赖的其他项目 间接地,关于它?

我认为您使用“更高”和“更低”等术语的含义与我的相反——对于一对项目,我认为“较低”项目是依赖于另一个项目的项目.可能是您的“思维导图”相对于我的简单垂直翻转,这很好;或者您可能误解了 Project Dependencies 框所要求的内容,而事实并非如此。它要求上面下拉列表中的命名项目直接依赖的项目列表,即那些必须是最新的(可能需要重建)才能构建命名项目的项目。

那么:请您澄清一下您打算在什么意义上“更高”和“更低”。

当您要求构建某个项目 X 时,VC++ 应该(我肯定会)做的是检查 X 直接或间接依赖的所有项目是否都是最新的,并构建任何不是。当这种构建发生时,每个项目总是在它直接或间接依赖的任何项目之后构建。请注意,即使项目本身没有更改,也可能需要重建——例如如果 X 依赖于 Y 并且 Y 依赖于 Z,那么更改 Z 并请求构建 X 需要首先构建 Z,然后是 Y(未更改), 然后是 X。如果甚至有“更低"(在我的意义上)依赖于 X 的项目,当您请求构建​​ X 时,它们不会被构建。

【讨论】:

  • 谢谢...是的,我的“思维导图”与你的垂直翻转了.. :) 如果 A 依赖于 B,我是说它更高。没关系:)只要我们清楚。至于 VC++ 做了什么,我同意你在最后一句话中的理解......“如果 X 依赖于 Y,Y 依赖于 Z,那么更改 Z 并请求构建 X 需要先构建 Z,然后是 Y(这不是更改),然后是 X。”
  • 我认为您的依赖关系图类似于继承图,不是吗?我将其想象为从上到下流动,基类在顶部..从未真正认为它是颠倒的。 :)
【解决方案3】:

无论如何,我的项目依赖项仅设置为级别:

  • 项目 A 依赖于库 B
  • 项目 A 依赖于库 C

但是,库 B 也使用库 C,但我没有将其设置为依赖项。这似乎工作正常。

你在改变头文件吗?当然 - 如果您更改标题,那么无论您是否设置了项目依赖项,都必须重新构建依赖于该标题的任何项目。

【讨论】:

  • 我正在更改您系统中项目 A 中的标题和源代码。当我重建 A 时,编译器会打印出有关 B 中某些代码位的警告。我希望它会忽略 B,因为它没有改变。
  • @Krakkos - 显示哪些警告?我有一个奇怪的情况,我在两个项目中同时有几个 .cpp 文件(添加文件的拖放操作有点错误)。只是一个想法。
  • @Steve:抱歉,您必须 -1,因为您确实需要将 C 列为 B 的依赖项。如果你开始着手一个新项目 D,它只依赖于 B,那么对 C 的更改应该会强制重建 B,但不会。提示难以发现的错误。每当你忽视真正的依赖关系时,你就会在路上给自己制造麻烦。
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多