C ++ MSVS,我应该做什么文件“清理”? (cl错误:D8037)

时间:2011-12-21 03:40:23

标签: c++ visual-c++ msbuild build visual-studio

使用C ++ MSVS2008,我遇到了越来越烦人的问题:断点在错误的行上执行,没有捕获等等。这是一个非常大的工作空间,有数千个文件,所以我“忍受它”。

我浏览了“标准”内容(干净,“深入”清理,手动删除*.idb*.pdb*il*等等。)它没有修复“断点” -on-wrong-line“问题,但事情至少已编译,我可以运行/调试。

那么,(由于无关的原因),我创建了一个命令行程序,它发出了一个编译一个CPP到OBJ的命令,并得到一个奇怪的错误:

cl : Command line error D8037 : cannot create temporary il file; clean temp directory of old il files

之前我从未听说过,所以网络搜索让我到微软网站详细说明错误:

http://msdn.microsoft.com/en-us/library/bb385201(v=VS.90).aspx

嗯,嗯?在我的系统TMP目录中,显然有太多_CL_hhhhhhhh.ss个文件。搜索,是的,我在该目录中有6,063个这些文件,可以追溯到大约一年。

我以前从未听说过这些文件(“临时编译文件”)。搜索Microsoft站点显示至少 MSVS 2005,2008,2010中可能出现此错误。作为“临时”文件,我假设存在某种“清理”或“循环”算法?< / p>

  • 有多少_CL_hhhhhhhh.ss个文件是限制? (我在6,063的条件下遇到了这个错误。)

  • 为什么我在EXE中执行“编译”而不是在MSVS IDE中执行“编译”时会看到此错误? (当我直接从命令行执行“编译”时,我没有看到这个错误。)

  • 我是否应该通过定期清理这些文件来对我的开发机器进行“维护”?

  • 我需要考虑哪些其他“残缺”文件来查找和删除?

顺便说一句,我知道MSVS项目GUID缓存在注册表中,以便IDE可以“找到”手动移动的项目文件,以“修复”与其他项目文件的链接/依赖关系。如果有人提出建议的话,我也想知道如何清理它们。

这个确实导致了一个终极问题,“在开发机器上使用MSVS会产生什么样的隐藏残余?”

Win7 / 64,C ++ MSVS 2008,NTFS

2 个答案:

答案 0 :(得分:1)

我不确定您遇到问题的特定文件是否相当大(超过10,000行),但在MSVS2008中,我在这种情况下有几次断点错误的问题。对我有用的解决方案(并提高了代码的可读性)是将一些函数逻辑地分组到一个类/命名空间中,并将它们放入一个新文件中。

答案 1 :(得分:1)

cl.exe when launched via CreateProcess does not seem to have write permissions解决了您的第二个问题。为什么只在exe中启动时才能看到它?

cl.exe最有可能在其他地方失败。如果您使用进程监视器,它将使您了解cl.exe所做的所有系统调用以及失败的内容。

就我而言,我在调用CreateProcess时覆盖了环境变量,并且在该过程中最终重置了SystemRoot环境变量。 cl.exe使用它来解析某些系统dll的路径,因此永远不会找到dll。

短期修复是将“SystemRoot = c:\ windows”添加到我传递给CreateProcess的环境设置中。

正确的长期修复是获取环境变量,解析它们并仅根据需要修改/追加并将整个环境变量块传递给CreateProcess。这样,通过CreateProcess启动的cl.exe继承了你的exe启动的环境变量。