程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 Visual studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题??

开发过程中遇到从 Visual studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?的问题如何解决?下面主要结合日常开发的经验,给出你关于从 Visual studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?的解决方法建议,希望对你解决从 Visual studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?有所启发或帮助;

所以我一直在尝试将我的 Qt/C++ 项目从 MSVC 2017 迁移到 MSVC 2019,这是一段艰难的时期。尝试在 Visual studio 2019 中构建时出现以下错误:

2>cl : command line warning D9002: ignoring unkNown option '/mp'@H_301_4@

我之前在使用 Visual studio 2017 时没有收到此错误,所以很奇怪。我非常需要这个标志,因为没有它我的编译时间要慢 10 倍以上。稍微不同的是,我也不太清楚如何使构建成为 32 位,但一次只做一件事。我的 cmake 文件如下所示:

# CMake build

# Project-level setup ====================================================
project( ENGIne ) # Todo: Set version
cmake_minimum_required( VERSION 3.16 )
set(TARGEt_name "ENGIne")
set(test_TARGEt_name "ENGIne_tests")

# Find includes in corresponding build directorIEs
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# instruct CMake to run moc automatically when needed.
set(CMAKE_autoMOC ON) # Saves having to use QT5_WRAP_CPP
set(CMAKE_autoRCC ON) # Saves having to use QT5_ADD_resourcES
set(CMAKE_autoUIC ON) # Saves having to use QT5_WRAP_UI

# Set compiler flags =====================================================
# Use C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_required ON)

# Todo: 64 bit
if (MSVC)
    add_compile_options(/mp /bigobj /wd4577 /wd4467 /wd26812 /wd26812)
else()
endif()

# Set paths to find Qt ===================================================
# Find Qt itself
if(${CR_655_11845@AKE_SYstem_namE} MATCHES "windows")
    # set(QT_MSVC_2017 "C:\\Qt\\5.12\\5.12.2\\msvc2017")
    set(QT_MSVC_2019 "C:\\Qt\\5.15\\5.15.2\\msvc2019")
    
    set(CMAKE_PREFIX_PATH ${QT_MSVC_2019})
else()
    message (WARNING "-------- System not supported ---------")
endif()

# Find UI files
set(CMAKE_autoUIC_SEARCH_PATHS "${CR_655_11845@AKE_CURRENT_sourcE_DIR}/ui")

# Find required Qt librarIEs =============================================
find_package(Qt5 COMPONENTS Core required)# Core stuff
find_package(Qt5 COMPONENTS Concurrent required) # For threading
find_package(Qt5 COMPONENTS Gamepad required) # Controller support
find_package(Qt5 COMPONENTS Gui required) # For OpenGL integration
find_package(Qt5 COMPONENTS OpenGLExtensions required)
find_package(Qt5 COMPONENTS Multimedia required) # Multimedia capabilitIEs
find_package(Qt5 COMPONENTS MultimediaWidgets required)
find_package(Qt5 COMPONENTS Widgets required) # For Widgets

# OpenGL librarIEs
# See: https://stackoverflow.com/questions/65100749/converTing-from-qmake-to-cmake-how-do-i-find-librarIEs-in-the-same-way/65106458#65106458
find_package(OpenGL required) # enforces as a requirement

# Set build mode directory options ========================================
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CR_655_11845@AKE_BINARY_DIR}/deBUG)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CR_655_11845@AKE_BINARY_DIR}/releasE)

# Set directorIEs to find librarIEs,need to do this before add_executable for desired target
file(TO_CMAKE_PATH "$ENV{PYTHON_liB}" ENV_PYTHON_liB)
message(STATUS "SetTing link directory ${ENV_PYTHON_liB}")
link_directorIEs(${ENV_PYTHON_liB})

# Build EXE ===============================================================
message (STATUS "-------- Finding source,header,resource,UI files relative to  ${CR_655_11845@AKE_sourcE_DIR} ---------")
file(GLOB_REcursE MY_sourcES relative ${CR_655_11845@AKE_sourcE_DIR} "src/*.cpp"  "src/*.h"
"resources/*.qrc" "ui/*.ui")

# Get all the source files to build the test suite
file(GLOB_REcursE MY_test_sourcES relative ${CR_655_11845@AKE_sourcE_DIR} "src/*.cpp" "src/*.h" "resources/*.qrc" "ui/*.ui" "tests/*.cpp" "tests/*.h")
List(FILTER MY_test_sourcES EXCLUDE REGEX "src/main.cpp")


# Generate release PDB
# https://stackoverflow.com/questions/28178978/how-to-generate-pdb-files-for-release-build-with-cmake-flags/31264946
add_compile_options("$<$<NOT:$<CONfig:DeBUG>>:/Zi>")
add_link_options("$<$<NOT:$<CONfig:DeBUG>>:/DEBUG>")
add_link_options("$<$<NOT:$<CONfig:DeBUG>>:/OPT:rEF>")
add_link_options("$<$<NOT:$<CONfig:DeBUG>>:/OPT:ICF>")

# Add an executable to be built from sources variable
# add_executable(${TARGEt_name} ${MY_sourcES})
add_executable(${TARGEt_name} WIN32 ${MY_sourcES}) # Makes sure that this is a windows application,not a console app
add_executable(${test_TARGEt_name} ${MY_test_sourcES})

# Pre-processor defines ===================================================
add_deFinitions(-D_UNICODE -D_ENABLE_EXTENDED_AliGNED_STORAGE -DWIN64 -DQT_DLL -DQT_OPENGL_liB)
add_deFinitions(-DDEVELOP_MODE)
add_deFinitions(-DliNALG_USE_EIGEN)

# disable warnings about deprecated things,like using strcpy (sorry,not sorry)
if(MSVC)
    add_deFinitions(-D_CRT_SECURE_NO_WARNINGS)
endif()

# Command-line configuration ===================================================
set_target_propertIEs(${TARGEt_name} PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS "${CR_655_11845@AKE_sourcE_DIR}")

# Add additional include directorIEs for including using src as root =======================================
target_include_directorIEs(${TARGEt_name} PRIVATE "${CR_655_11845@AKE_sourcE_DIR}/src")
target_include_directorIEs(${test_TARGEt_name} PRIVATE "${CR_655_11845@AKE_sourcE_DIR}/src")

########### Iterate over all targets to link librarIEs #################
foreach(current_target ${TARGEt_name} ${test_TARGEt_name})

# Set linker propertIEs ===================================================
set(DEBUG_DEFinitioNS "DEBUG_MODE")
set(RELEASE_DEFinitioNS "QT_NO_DEBUG_OUTPUT")
target_compile_deFinitions(${Current_target} PUBliC
    $<$<CONfig:DEBUG>:${DEBUG_DEFinitioNS}>
    $<$<CONfig:rELEASE>:${RELEASE_DEFinitioNS}>
)

# link required Qt modules to main target =================================
target_link_librarIEs(${Current_target} OpenGL::GL OpenGL::glu)
target_link_librarIEs(${Current_target} Qt5::CorE)
target_link_librarIEs(${Current_target} Qt5::Concurrent) 
target_link_librarIEs(${Current_target} Qt5::Gamepad)
target_link_librarIEs(${Current_target} Qt5::Gui)
target_link_librarIEs(${Current_target} Qt5::OpenGLExtensions) # Todo: Probably unnecessary,remove
target_link_librarIEs(${Current_target} Qt5::Multimedia)
target_link_librarIEs(${Current_target} Qt5::MultimediaWidgets)
target_link_librarIEs(${Current_target} Qt5::Widgets)

# Add additional librarIEs ================================================
# stuff here
    

endforeach()
@H_301_4@

希望它非常简单,我正在构建一个主要项目和一个测试项目。我知道 cmake 人员非常不鼓励文件 GLOB,但我最终会手动输入我的文件路径。否则,这对我来说在 MSVC 2017 上工作得很好。之前(当我只安装了 Visual studio 2017 时),使用以下方法调用 cmake 就足够了:

cmake -B"./app" -S"./my_project"
@H_301_4@

但现在我正在做以下事情:

cmake -B"./app" -S"./my_project" -G "Visual studio 16 2019" -A Win32
@H_301_4@

据我所知,这应该给我我想要的,这是一个 32 位构建。但是,当我转到我的项目的配置属性时,Preferred Build Tool Architecture@H_301_4@ 仍然是 64 位。这与项目本身的构建有关吗?如果这不是问题,那就太好了!但是,我仍然不明白为什么不再识别 /MP@H_301_4@ 标志。

解决方法

试试/MP10

processmax 参数的范围必须在 1 到 65536 之间。否则,编译器会发出警告消息 D9014,忽略 processmax 参数,并假定最大进程数为 1。

https://docs.microsoft.com/en-us/cpp/build/reference/mp-build-with-multiple-processes?view=msvc-160

大佬总结

以上是大佬教程为你收集整理的从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?全部内容,希望文章能够帮你解决从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。