VS2008 C++编译器一直要求构建项目

4

可能是重复:
Visual studio一直在构建所有内容

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

我构建这个项目一切正常,然后尝试运行项目,告诉我项目已过期,是否要构建它。如果我选择是构建它,idl将再次被编译。

有没有办法停止这个操作,而不设置VS项目设置为永远不提示我进行构建?


点击“编译并运行”按钮会发生什么?会不会发生相同的事情? - Greg Treleaven
嗨,Greg,你所说的“编译并运行”按钮是指“开始调试”(F5)命令吗?还是你指的是另一个命令?如果是F5命令,那么我正在使用它进行调试构建。我在发布构建上不带调试启动(Ctrl + F5),但即使我知道所有内容都已构建完成,我仍然会收到一条消息告诉我需要构建项目。 - Gary Miller
@Gary Miller 只是出于兴趣,为什么你想保留构建前运行对话框而不是自动构建呢?我还没有遇到过在没有最新修改的情况下运行代码有用的情况,所以我很想听听你的看法。 - Zooba
@Zooba 我们的项目是一个非常大的项目,有多个子项目。在基础项目中进行更改可能会导致许多其他项目的构建时间长达几分钟。我们经常会有销售人员来展示软件的其他功能给客户,因此我们可能需要快速运行最新的构建版本以展示已经实现的不同功能。我个人认为,我们需要调查一下项目之间的耦合性。 - Gary Miller
@Gary Miller 这个说得很公道。我从来没有在开发环境中遇到过销售人员会要求在开发机上进行演示而不是在另一台机器上进行演示。 - Zooba
拂去对COM的模糊回忆听起来像是依赖于MIDL编译器输出的东西之间存在循环引用。第一次尝试进行干净构建时是否会失败,然后第二次尝试时成功?(请记住,如果您将生成的.h、.c、.tlh或.thi文件检入源代码控制,则有时会掩盖此问题。) - dkackman
1个回答

2
一旦您构建了.idl文件,打开其属性并启用“从生成中排除”。
如果您更新了文件,则可以通过在“解决方案资源管理器”中选择该文件并选择“编译”(我的设置上的快捷键是Ctrl + F7,但这可能会有所不同)手动构建它。
如果您不在版本控制系统中包含生成的文件,则新的检出也需要手动重新构建.idl文件。特别是这种情况可能会引起很多困惑 - 值得将生成的文件包含在版本控制之下。
另一种选择是创建自定义构建工具(或预构建事件),该工具将比较.idl文件的最后修改日期/时间与输出文件的最后修改日期/时间,然后根据需要调用MIDL。这是VS用于确定是否运行CL的行为,但它不用于MIDL,并且据我所知,无法在VC ++ 2008项目文件中启用。

对我们来说,理想的情况是IDL仅在需要时生成.c文件 - 有没有办法判断IDL是否已经生成了最新的源文件? - Gary Miller
@Gary Miller 我同意,那将是理想的。通常所做的测试是比较源文件的最后修改时间和输出文件的最后修改时间。MIDL 显然没有这样做。如果您使用的是 VS2010,则可以修改项目文件(一个 MSBuild 脚本)来进行测试,但是 VS2008 使用了不同的项目文件格式,据我所知,不支持此类修改。在这里也可以使用自定义构建工具,但是必须将其分发到开发机器上,并且可能会带来不必要的痛苦。 - Zooba
1
我觉得我已经花了足够的时间在这上面了 - 建立IDL,然后从构建中排除它将是我的答案。谢谢你的时间和意见。 - Gary Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接