<div dir="ltr">I have a simple CMake project that builds an executable using Visual Studio 2017:<div><br></div><div>#==============================================<br><br>cmake_minimum_required(VERSION 3.5 FATAL_ERROR)<br><br>################### Variables. ####################<br># Change if you want modify path or other values. #<br>###################################################<br><br>set(PROJECT_NAME CPlaneTest)<br># Output Variables<br>set(OUTPUT_DEBUG Debug/bin)<br>set(OUTPUT_RELEASE Release/bin)<br># Folders files<br>set(CPP_DIR_1 ./)<br>set(CPP_DIR_2 ./)<br>set(CPP_DIR_3 ./)<br>set(CPP_DIR_4 ./)<br>set(HEADER_DIR_1 )<br><br>############## CMake Project ################<br>#        The main options of project        #<br>#############################################<br><br>project(${PROJECT_NAME} CXX)<br><br># Define Release by default.<br>if(NOT CMAKE_BUILD_TYPE)<br>  set(CMAKE_BUILD_TYPE "Release")<br>  message(STATUS "Build type not specified: Use Release by default.")<br>endif(NOT CMAKE_BUILD_TYPE)<br><br># Definition of Macros<br>add_definitions(<br>   -D_CONSOLE<br>   -DUNICODE<br>   -D_UNICODE<br>)<br><br>############## Artefacts Output #################<br># Defines outputs , depending Debug or Release. #<br>#################################################<br><br>if(CMAKE_BUILD_TYPE STREQUAL "Debug")<br>  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")<br>  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")<br>  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")<br>else()<br>  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")<br>  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")<br>  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")<br>endif()<br><br>################# Flags ################<br># Defines Flags for Windows and Linux. #<br>########################################<br><br>if(MSVC)<br>   #set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D _DEBUG /W3 /MD /Od /Zi /EHsc")<br>   set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /W3 /GL /Od /Oi /Gy /Zi /EHsc")<br>   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /D _DEBUG /W3 /GL /Od /Oi /Gy /Zi /EHsc")<br>endif(MSVC)<br>if(NOT MSVC)<br>   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")<br>   if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")<br>       set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")<br>   endif()<br>endif(NOT MSVC)<br><br>################ Files ################<br>#   --   Add files to project.   --   #<br>#######################################<br><br>file(GLOB SRC_FILES<br>    ${CPP_DIR_1}/*.cpp<br>    ${CPP_DIR_2}/*.cpp<br>    ${CPP_DIR_3}/*.cpp<br>    ${CPP_DIR_4}/*.cpp<br>    ${HEADER_DIR_1}/*.h<br>)<br><br># Add executable to build.<br>add_executable(${PROJECT_NAME}<br>   ${SRC_FILES}<br>)<br><br>if(MSVC)<br>   target_link_libraries(${PROJECT_NAME} ws2_32.lib )<br>endif(MSVC)<br><br>#=====================================<br><br>The Release build succeeds but the Debug build fails with linker errors such as:<br><br>[build] CPlaneTest.obj : error LNK2001: unresolved external symbol __imp___CrtDbgReport<br><br>I think this is because the linker is not using the debug version of CRT (C Run-time Library).  <br><div><br></div><div>Should CMake select the debug build of CRT automatically or do I need to specify it manually? If so, should I do so using CMAKE_EXE_LINKER_FLAGS?</div></div></div>