我正在使用qtcreator编译一个大型c++项目,操作系统是windows,编译器是visual studio。
qtcreator 中有一个选项可以使用 jom 而不是 nmake 进行编译,当它被激活时,我的项目构建速度提高了 10 倍。
我习惯用 jom 在发布模式下编译这个项目,但几周后它就不再工作了。但是,我仍然可以在调试模式下使用 jom 或在发布模式下使用 nmake 进行编译。
当我在发布版本中使用 jom 时,我多次遇到相同的错误:C1041 多个 cl.exe 写入同一个 .pdb 文件。使用 /FS
当我查看 qt 编译输出时,似乎产生这些错误的命令与此类似:
cl -c -wd4100 -wd4244 -wd4068 -wd4267 -utf-8 /we4715 -O2 -Zi -MD -EHsc -GR -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 /FdC:/Users/fgodi/Desktop/release/lib64/boost_components.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DNDEBUG -D_REENTRANT -DHAVE_EIGEN -DEIGEN_DONT_PARALLELIZE -DHAVE_HDF5 -DWIN32_LEAN_AND_MEAN -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_USE_DECLSPECS_FOR_SAL -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_SECURE_SCL=0 -D_ITERATOR_DEBUG_LEVEL=0 -DNDEBUG -DARCH_SSE2 -DBOOST_THREAD_PROVIDES_FUTURE -DBOOST_THREAD_VERSION=4 -DBOOST_THREAD_BUILD_LIB -DQT_QML_DEBUG -IC:\Users\fgodi\Desktop\release\src\boost -I. -IC:\Users\fgodi\Desktop\release\src\boost -IC:/Users/fgodi/Desktop/release/src/boost/.libs/boost/libs/math/src/tr1 -IC:\Users\fgodi\Desktop\release\src -IC:\Users\fgodi\Desktop\release\src\boost -IC:\Users\fgodi\Desktop\release\include -IC:\Users\fgodi\Desktop\release\src\eigen -IC:\Users\fgodi\Desktop\release\include\hdf5 -IC:\Qt\5.13.2\msvc2017_64\mkspecs\win32-msvc -Fobuild-msvc-64-release\ @C:\Users\fgodi\AppData\Local\Temp\global_resource.obj.9152.219.jom
global_resource.cpp
由于
/FS
,您可能需要
/Zi
。有两件事你可以尝试,要么应该工作:
QMAKE_CXXFLAGS *= /FS
。把它放在你的全局编译器设置中,如果你有的话(通常是一个.pri
文件)。另外,我从来没有见过你描述的方式使用OPTFLAGS
,只有QMAKE_CXXFLAGS
。此外,正如您所观察到的,仅将其包含在主要的 .pro 中不会做太多事情。/Zi
。我还没有看到你的 .pro 文件,但我假设你已经从某个地方包含了那个标志——它通常不是发布版本中的默认设置。附加信息:您的问题是多线程构建中出现的简单并发问题。有时你很幸运你的项目结构没有问题,但最终你会得到它们。
还有一个提示:检查编译器命令行生成的 Makefile.Release,这通常比尝试从编译日志中收集它更快。