Visual c++ CMake仅在带有g++;选项

Visual c++ CMake仅在带有g++;选项,visual-c++,cmake,Visual C++,Cmake,当我从CMakeLists.txt中删除-g和-O3选项时,我的MSVC失败,并出现许多错误,如: libcpmt.lib(xwcscoll.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in ExamplesTest.obj 我不理解这个奇怪的错误,因为它清楚地写着: 忽略未知选项'-g

当我从
CMakeLists.txt
中删除
-g
-O3
选项时,我的MSVC失败,并出现许多错误,如:

libcpmt.lib(xwcscoll.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in ExamplesTest.obj
我不理解这个奇怪的错误,因为它清楚地写着:

忽略未知选项'-g'
忽略未知选项'-O3'

CMakeLists.txt,可以正常工作

CMakeLists.txt不起作用

你能解释一下CMA在工作案例中做了哪些额外的步骤吗

编辑: 我已经测试、重建和清理了好几次,我几乎可以肯定错误来自那里。

这是因为
set(CMAKE\u CXX\u FLAGS\u DEBUG“-g”)
set(CMAKE\u CXX\u FLAGS\u RELEASE“-O3”)重载了现有的设置。
当我使用MSVC编译时,我只是为
CMAKE\u CXX\u FLAGS\u RELEASE
CMAKE\u CXX\u FLAGS\u RELEASE
设置了一个值

if(MSVC)
  message("-- CMake run for msvc")
  set(CMAKE_CXX_FLAGS_RELEASE "/O2 /MT")
  set(CMAKE_CXX_FLAGS_DEBUG "/Od /Zi /MTd")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-s-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-gd-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-sgd-x64-1_71.lib")
else()
  #set(CMAKE_CXX_FLAGS "-Wall -Wextra")
  set(CMAKE_CXX_FLAGS_DEBUG "-g")
  set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif(
cmake_minimum_required(VERSION 3.0)
project(NeuralNetwork CXX)
set(CMAKE_CXX_STANDARD 17)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

if(MSVC)
  message("-- CMake run for msvc")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-gd-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-sgd-x64-1_71.lib")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi")
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2")
else()
  message("-- CMake run for g++")
  set(CMAKE_CXX_FLAGS_DEBUG "-g")
  set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif()

add_subdirectory(src)
add_subdirectory(tests)
if(MSVC)
  message("-- CMake run for msvc")
  set(CMAKE_CXX_FLAGS_RELEASE "/O2 /MT")
  set(CMAKE_CXX_FLAGS_DEBUG "/Od /Zi /MTd")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-s-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-gd-x64-1_71.lib")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libboost_serialization-vc142-mt-sgd-x64-1_71.lib")
else()
  #set(CMAKE_CXX_FLAGS "-Wall -Wextra")
  set(CMAKE_CXX_FLAGS_DEBUG "-g")
  set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif(