vs2010:error MSB4018 “CL”任务意外失败 (The "CL" task failed unexpectedly. )

来源:互联网 发布:安居客盗图软件 编辑:程序博客网 时间:2024/06/06 14:06
前天把项目从VS2005升级到vs2010,解决了一些由于使用boost库的问题(VS2010的库已经集成了部分boost),然后就被下面这个编译链接问题搞得很是郁闷。

详细输出:

1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: “CL”任务意外失败。1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: System.AggregateException: 发生一个或多个错误。 ---> System.ArgumentOutOfRangeException: 不是有效的 Win32 FileTime。1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: 参数名: fileTime...

Google、百度一番,大都是说使用 Ramdisk引起的问题,把环境变量 TEMP TMP 不设在根目录就可以了,但我的很明显不是这种情况。
1.我的电脑根本没使用过 RamDisk 来管理系统认不到的内存。
2.我的工程包含了好几个项目,但其他项目都没有此问题
3.有问题的项目重新生成没有问题,但只要改动任何代码再生成时就会出现上述错误。可能网上说的那些也是这样,只是都没提到重新生成行不行。
另外,网上还有说:要确保源文件对应的头文件都在目录树中。但我试过仍然不行。
看来只有结合自己的情况认真分析了。

双击下面提示的出错信息,转向了出错的文件。是微软自己的文件:

C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets  定位到下面的行:

<CL Condition="'%(ClCompile.PrecompiledHeader)' != 'Create' and '%(ClCompile.ExcludedFromBuild)'!='true'">
    好像和预处理有关,但实在是看不出所以然。再Google,有些说是类似这样的文件中的设置,把上面那行中的 true 改为false,不行。
    然后放弃查看这个文件,一点点对比了有问题的这个项目和其他项目的设置情况。最后设置完全相同,但问题依旧。
    经历了很多尝试,又 google 了下,还是没找到答案,最后又回到了微软那个奇怪的文件上。
    既然是预处理,那我就尝试有关预处理的设置吧。

    最后解决方法:

        项目属性->C/C++-> 预编译头  选项卡中的 "预编译头" 由 "使用(/Yu)" 改为 "创建(/Yc)",然后重新生成,问题解决。实际上也应该算是重新生成了吧


    编译时每次都创建预编译头太费时间,vs2010本来就感觉很慢,而且其它项目都是设置为 "使用(/Yu)",唯独这个项目不行呢?一般项目设置中默认是 /Yu, 只是源文件中的stdafx.cpp 默认是 Yc,其它文件全是Yu。有了 stdafx.cpp 这个文件,stdafx.h中包含的东西才只需一次编译生成(Yc),以后就不用重新编译了。

    项目属性中设定为 Yc后,所有cpp文件都自动变为Yc,无疑会大大增加每次编译的时间,但没有其他办法也只有先这样了。

    到底什么原因不得而知,以后有空再研究。如有知道的达人请不吝赐教。


    注:后来为节省编译时间,我把除 stdafx.cpp 的其它所有文件的属性都手动改为 Yu,这样我感觉实际上和在项目中设置 Yu的效果是一样的。开始能编译,感觉就这样了,但后来还是会碰到前面的那种该死的错误,就又把整个项目的属性改成了Yu

    补充更新:后来实在无法容忍每次重新编译的时间之长,我换了台电脑,并把项目属性中的预编译头改为默认的 “Yu”,问题竟然没有了。。。。看了还是和环境有关,所以各位在万不得已的情况下也重装系统吧。。。

0 0
原创粉丝点击