【问题标题】:VS2008 C++ compiler keeps asking to build the project [duplicate]VS2008 C ++编译器不断要求构建项目[重复]
【发布时间】:2011-06-28 10:43:55
【问题描述】:

可能重复:
Visual studio keeps building everything

我有一个项目,其中包含一个 idl 文件,该文件生成一个 .c 文件,该文件包含在同一项目的另一个文件中。

我构建了这个项目,一切都很好,然后我尝试运行该项目,我被告知该项目已过时,我想构建它。如果我选择是来构建它,idl 会再次编译。

如果不将 VS 项目设置设置为从不提示我进行构建,是否有任何方法可以阻止此操作?

【问题讨论】:

  • 如果您单击“编译运行”按钮会发生什么?是否也会发生同样的事情?
  • 嗨,格雷格,“编译并运行”按钮是指“开始调试”(F5)命令吗? - 还是您指的是另一个命令?如果是 F5 命令,那么这就是我用于调试构建的命令。我开始时没有调试发布版本 (Ctrl + F5) - 即使我知道所有内容都已构建,我仍然会收到一条消息,告诉我需要构建项目。
  • @Gary Miller 只是出于兴趣,为什么要保留运行前构建对话框而不是自动构建?我还没有遇到过在没有最新修改的情况下运行您的代码很有用的案例,所以我很想听听。
  • @Zooba 我们的项目非常大,有多个子项目,对许多其他项目使用的基础项目进行更改可能会导致几分钟的构建时间,我们经常会有销售人员过来向客户演示软件的另一个方面,因此我们可能希望快速运行最后一个版本,显示可能已实现的不同功能。我的诚实意见是我们需要调查我们项目之间的耦合。
  • @Gary Miller 这是一个公平的决定。我从来没有在一个开发环境中,销售人员会要求在开发机器上而不是单独的机器上进行演示。

标签: c++ visual-studio-2008 idl midl


【解决方案1】:

一旦您构建了 .idl 文件,打开它的属性并启用“从构建中排除”。

如果您更新文件,您可以通过在解决方案资源管理器中选择文件并选择“编译”来手动构建它(在我的设置中,快捷方式是 Ctrl+F7,但这可能会有所不同)。

如果您没有在版本控制系统中包含生成的文件,则还需要重新签出以手动重建 .idl 文件。这种情况尤其会引起很多混乱 - 可能值得将生成的文件包含在版本控制之下。

另一种选择是创建自定义构建工具(或预构建事件),它将 .idl 文件的最后修改日期/时间与输出文件的最后修改日期/时间进行比较,然后调用 MIDL,如果必需的。这是 VS 用来确定是否运行 CL 的行为,但它不用于 MIDL,据我所知,无法在 VC++ 2008 项目文件中启用。

【讨论】:

  • 对我们来说理想的情况是 IDL 仅在需要时生成 .c 文件 - 有没有办法告诉 IDL 是否已经生成了最新的源文件?
  • @Gary Miller 我同意,那将是理想的。通常所做的测试是将源文件的最后修改时间与输出文件的最后修改时间进行比较。 MIDL 显然没有这样做。如果您使用的是 VS2010,则可以修改项目文件(一个 MSBuild 脚本)来测试这一点,但 VS2008 使用了不同的项目文件格式,AFAIK 不支持这种修改。自定义构建工具也可以在这里工作,但将其分发到开发机器是 100% 必需的,并且可能是不必要的痛苦。
  • 我想我现在已经在这方面花费了足够的时间 - 构建 IDL 然后将其从构建中排除将是我的答案。感谢您的时间和投入。
猜你喜欢
  • 2017-02-11
  • 1970-01-01
  • 2013-04-02
  • 2010-11-24
  • 2020-08-29
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多