VS2010多项目工程每次生成都要重新编译所有项目问题分析及解决

一、引言

在vs多项目解决方案中,有时候生成项目时需要编译所有子项目,当子项目数量多的时候,特别费时。而且有时候编译过程还产生一些奇怪的错误,比如:
在这里插入图片描述
多次编译后,项目又可以正常运行,真是头疼。虽然项目最终可以运行起来,但是问题不解决也是特别影响开发效率,于是决定将这些问题找出来。

二、分析

找到的相关博客也有类似的问题:
编译问题解决:LINK : fatal error LNK1104: 无法打开文件“*.dll”
其中EvComPortDeviced.lib 应该是该项目的输出文件,而此时却显示无法打开该文件。

觉得非常匪夷所思 T_T

明明是我要输出的文件,你却告诉我无法打开,这是因为什么原因呢?

原作者说是可能是因为EvComPortDeviced.lib 被其他程序占用了导致的这个文件不能被打开更改。然而到底是什么程序占用了这个文件呢?

查看任务管理器的时候发现Vs开了多个编译进程,同时编译多个项目。
在这里插入图片描述
猜想应该就是我原本的输出目录下已经存在了EvComPortDeviced.lib文件,所以同时编译多个项目的时候,可能有的项目依赖了该文件,就直接从输出目录中使用了这个文件。而这个文件所在的工程也在同时编译,当生成该文件时,发现文件被占用,所以就报错了。
为了证明这个猜想,把vs同时编译数量设为1。在这里插入图片描述
再次编译就不会出现这个问题了。但是仍然需要重新编译多个子项目。于是又有问题,为什么EvComPortDeviced.lib所在的项目并没有更改,而每次编译的时候却一直需要重新生成该项目呢?

项目需要重新编译,说明该项目应该是已经过期了。但是我没有改动这个项目,为什么会存在过期问题呢?
参考VS2010每次调试都出现“此项目已经过期”提示
按原文的步骤操作,在DbgView中获取的信息类似

[36184] Project 'D:\MyCode\Study\HelloWorld\HelloWorld.vcxproj' not up to date because build input 'D:\MYCODE\STUDY\HELLOWORLD\TARGETVER.H'; is missing.

在这里插入图片描述
说是EvComPortDeviced工程无法更新,因为COMMONTOOLDLLD.lib已经改变了。也就是说EvComPortDeviced的依赖项改变了,所以这个工程也应该需要重新生成。而COMMONTOOLDLLD的工程我也没有改变过,为什么也需要重新生成?继续寻找COMMONTOOLDLLD的问题,结果发现COMMONTOOLDLLD的问题是说EvComPortDeviced.lib被更改了。也就是循环包含了。

查看代码,修改循环包含的问题,把项目的依赖项选项也设置好后,问题解决。

三、结语

有时候粗心大意,可能出现项目重复包含问题,当输出目录下已经存在原有的一个工程生成的lib文件,后续如果出现循环包含,编译器输出的信息有时候也不足以分析出问题。其实这个问题重新生成解决方案应该就能发现的了问题吧。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值