所以我有一个名为build.bat的Windows批处理文件,我使用它来使用CL.exe从命令行构建我的C / C ++应用程序(我目前正在使用Visual Studio 2017)。我的问题基本上是,每隔一段时间cl.exe就会锁定编译器创建的.obj文件,否则会锁定vc140.pdb(visual studio的调试数据库)。这使它成为我所需要的,感觉就像垃圾邮件一样,直到最后这个错误消失并且代码最终编译完毕。我在谷歌上做了大量的搜索,没有一个解决方案有效。建议的解决方案之一是使用-FS(强制同步PDB写入)作为编译器选项之一,但仍然无法正常工作。我每次选择编译时都尝试删除.pdb和.obj,但仍然无法正常工作。为了说清楚我还没有找到重建这个错误的方法,它只发生在6个版本之后,如果有人有修复的解决方案或任何想法,我将非常感激。
当我收到有关vc140.pdb的错误时,这是缓冲区输出:
[vcvarsall.bat] Environment initialized for: 'x64'
main.cpp
e:\work\math\code\main.cpp: fatal error C1041: cannot open program database 'E:\work\math\build\vc140.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS
exited with code 0
当我收到抱怨.obj文件
的错误时,这是缓冲区输出[vcvarsall.bat] Environment initialized for: 'x64'
main.cpp
e:\work\math\code\main.cpp : fatal error C1083: Cannot open compiler generated file: 'e:\work\math\build\main.obj': Permission denied
exited with code 0
这是build.bat文件:
@echo off
if not defined DevEnvDir (
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
)
pushd ..\build\
cl -FC -nologo -Zi ..\code\main.cpp
popd
以下是我用作尝试重新创建问题的测试的主文件:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Test123\n");
return 0;
}
再次感谢您的帮助,非常感谢。