我在Windows 10下使用MinGW作为我的开发工具。我有一个包含约100个源文件的C项目。我创建了一个makefile来构建项目,每次都运行良好。
但后来我试图通过将-j4
传递给mingw32-make
来加速构建,告诉它并行使用四个处理器。这确实加快了构建速度,但只有一段时间:在看似随机数量的编译之后(数字每次都在变化),我得到了错误
gcc.exe:错误:CreateProcess:没有这样的文件或目录
我也使用-j2
收到此错误,但似乎不太常见。
mingw32-make --version
报告
GNU Make 4.1
专为i686-w64-mingw32而设计
我在Qt Creator下也有一个大型的C ++项目,这也表现出完全相同的问题。
任何可能导致此随机CreateProcess错误的想法?
以下是失败CreateProcess
来电的示例:
CreateProcess(C:\Users\TonyK\AppData\Local\Temp\make44344-14.bat,C:\Users\TonyK\AppData\Local\Temp\make44344-14.bat,...)
答案 0 :(得分:0)
可能是竞争条件,即某些相互依赖的构建步骤之间缺乏同步。
对GNU make使用--trace
参数来查看它正在尝试的内容以及--output-sync
将特定配方和目标的所有输出分组在一起。目标是查看哪个命令行产生错误以及哪个文件。
其他可能的原因:
@Vroomfondel怀疑这是mingw32-make
中的错误。这仅适用于临时.bat
文件是作为内部mingw32-make
逻辑而非Makefile
逻辑的一部分创建的情况。在这里,您需要调试跟踪CreateProcess
调用的时间与创建相关文件的时间。
另一个可能的原因是registry settings related to cmd.exe
or .bat
extension broken by malware。如果是这种情况,则在执行CreateProcess
时会发生错误,并且该错误位于mingw32-make
的外部。
答案 1 :(得分:0)
我想我知道问题是什么:BullGuard。这个反病毒程序是我遇到的最苛刻的程序,对于一个认真的开发人员来说是完全不切实际的。它不止一次拒绝运行我自己编译的程序。最后一根稻草是它打断了我的QtCreator开发环境,因为它正在执行一些“可疑的”操作(我不知道 - 产生一个子流程或其他东西),我丢失了四个源文件!幸运的是,我有一个当天的备份,所以它只花了我几个小时的工作。
所以我卸载了BullGuard。
现在,我的并行制作就像梦一样!