无法使用 jom 构建我的 C++ 项目。 qmake 问题?

问题描述 投票:0回答:1

我正在使用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
  1. 我想在这个命令中添加/FS 但我不知道这个命令来自哪里,这些选项中的大多数都不是来自.pro。如果我在项目的主要 .pro 中添加“OPTFLAGS += /FS”,它不会改变任何东西。我应该在任何 .pro 中添加“OPTFLAGS += /FS”吗?
  2. 我什至不确定它会解决问题,因为出于某种原因, 我不能只将命令粘贴到命令行并尝试添加 /FS 到它。当我尝试这样做时还有其他错误,我将 cl 添加到我的 路径,但可能需要其他一些上下文。
  3. 我不明白为什么我突然需要这个/FS,而我几个月前一直在毫无问题地编译这个项目。
c++ visual-studio qmake pdb-files nmake
1个回答
0
投票

由于

/FS
,您可能需要
/Zi
。有两件事你可以尝试,要么应该工作:

  • 指定
    QMAKE_CXXFLAGS *= /FS
    。把它放在你的全局编译器设置中,如果你有的话(通常是一个
    .pri
    文件)。另外,我从来没有见过你描述的方式使用
    OPTFLAGS
    ,只有
    QMAKE_CXXFLAGS
    。此外,正如您所观察到的,仅将其包含在主要的 .pro 中不会做太多事情。
  • 摆脱
    /Zi
    。我还没有看到你的 .pro 文件,但我假设你已经从某个地方包含了那个标志——它通常不是发布版本中的默认设置。

附加信息:您的问题是多线程构建中出现的简单并发问题。有时你很幸运你的项目结构没有问题,但最终你会得到它们。

还有一个提示:检查编译器命令行生成的 Makefile.Release,这通常比尝试从编译日志中收集它更快。

© www.soinside.com 2019 - 2024. All rights reserved.