Issue
When I remove -g
and -O3
option from CMakeLists.txt
my MSVC fail with lot of errors like:
libcpmt.lib(xwcscoll.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in ExamplesTest.obj
I don't understand this strange bug because it's clearly write:
ignoring unknown option '-g'
and ignoring unknown option '-O3'
CMakeLists.txt that works
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")
endif()
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
add_subdirectory(src)
add_subdirectory(tests)
CMakeLists.txt that doesn't work
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)
Can you explain me what did CMake as extra-step in the working case?
Edit: I have tested, rebuilt, and cleaned several times, I am almost sure that the error comes from there.
Solution
It's because set(CMAKE_CXX_FLAGS_DEBUG "-g")
and set(CMAKE_CXX_FLAGS_RELEASE "-O3")
overload existing setting.
I just set a value for CMAKE_CXX_FLAGS_RELEASE
and CMAKE_CXX_FLAGS_RELEASE
when I'm compile with MSVC.
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(
Answered By - Matthieu H