大佬教程收集整理的这篇文章主要介绍了从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我一直在尝试将我的 Qt/C++ 项目从 MSVC 2017 迁移到 MSVC 2019,这是一段艰难的时期。尝试在 Visual studio 2019 中构建时出现以下错误:
我之前在使用 Visual studio 2017 时没有收到此错误,所以很奇怪。我非常需要这个标志,因为没有它我的编译时间要慢 10 倍以上。稍微不同的是,我也不太清楚如何使构建成为 32 位,但一次只做一件事。我的 cmake 文件如下所示: 希望它非常简单,我正在构建一个主要项目和一个测试项目。我知道 cmake 人员非常不鼓励文件 GLOB,但我最终会手动输入我的文件路径。否则,这对我来说在 MSVC 2017 上工作得很好。之前(当我只安装了 Visual studio 2017 时),使用以下方法调用 cmake 就足够了: 但现在我正在做以下事情: 据我所知,这应该给我我想要的,这是一个 32 位构建。但是,当我转到我的项目的配置属性时,
2>cl : command line warning D9002: ignoring unkNown option '/mp'@H_301_4@
# 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 -B"./app" -S"./my_project"
@H_301_4@
cmake -B"./app" -S"./my_project" -G "Visual studio 16 2019" -A Win32
@H_301_4@
Preferred Build Tool Architecture@H_301_4@ 仍然是 64 位。这与项目本身的构建有关吗?如果这不是问题,那就太好了!但是,我仍然不明白为什么不再识别
/MP@H_301_4@ 标志。
解决方法
以上是大佬教程为你收集整理的从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?全部内容,希望文章能够帮你解决从 Visual Studio 2017 迁移到 2019,遇到 /MP 标志并实现 32 位构建的问题?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。