#------------------------------------------------------------------------------- # C/CXX Flags #------------------------------------------------------------------------------- set(CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS" ) set(CMAKE_C_FLAGS_DEBUG "/Ob0 /Oi- /Od /Oy- /RTC1 /D_DEBUG" ) set(CMAKE_C_FLAGS_RELEASE "/O2 /Oi /Ob2 /Ot /Oy /DNDEBUG" ) set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Oi- /Ob1 /Os /Oy /DNDEBUG" ) set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Oi /Ob1 /Ot /DNDEBUG" ) set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") #------------------------------------------------------------------------------- # Compile Definitions #------------------------------------------------------------------------------- add_compile_definitions( # Shared library definitions $<$,SHARED_LIBRARY>:_USRDLL> $<$,SHARED_LIBRARY>:_WINDLL> $<$,SHARED_LIBRARY>:_WINDOWS> # Static library definitions $<$,STATIC_LIBRARY>:_LIB> # Enable/disable exception support $<$:_HAS_EXCEPTIONS=1> $<$>:_HAS_EXCEPTIONS=0> ) #------------------------------------------------------------------------------- # Compile Options #------------------------------------------------------------------------------- # Code generation add_compile_options( /QIntel-jcc-erratum # Mitigate performance impact of the Intel JCC erratum microcode update /Gy # Enable function-level linking # Non-Debug: Enable string pooling $,/GF-,/GF> # Non-Debug: Enable whole-program global data optimization $,/Gw-,/Gw> # Non-Debug executables: Optimize for Windows applications $<$>,$,EXECUTABLE>>:/GA> # Enable/disable standard exception handling $<$:/EHsc> $<$>:/EHs-c-> # Enable/disable Run-Time Type Information $<$:$,/GR,/GR->> # Enable AddressSanitizer instrumentation $<$:/fsanitize=address> ) # Language add_compile_options( # Non-Debug: Strip unreferenced COMDAT $<$>:/Zc:inline> ) # Miscellaneous add_compile_options( /cgthreads${NUM_CORES} # Thread count for code generation /utf-8 # Set source and execution character sets to UTF-8 /validate-charset # Validate the source file charset # Debug and RelWithDebInfo: Enable concurrent PDB writes for shared access $<$,$>:/FS> ) # Diagnostics add_compile_options( /diagnostics:caret # Display error diagnostics with caret indicators /external:W0 # Suppress warnings from external headers ) # Debug: Enable Just My Code debugging in Visual Studio set(CMAKE_VS_JUST_MY_CODE_DEBUGGING $) #------------------------------------------------------------------------------- # Link Options #------------------------------------------------------------------------------- set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO") set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/INCREMENTAL:NO") set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO") set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}") set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}") set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") add_link_options( # Debug and RelWithDebInfo: Generate debug information in PDB files $<$,$>:/DEBUG> # Release and MinSizeRel: Disable debug information generation $<$,$>:/DEBUG:NONE> # Non-Debug: Enable Link Time Code Generation $<$>:/LTCG> # Non-Debug: Apply link-time optimizations $<$>:/OPT:REF,ICF,LBR> # Non-Debug: Treat warnings as errors $<$>:/WX> # Enable/disable Safe Exception Handlers $<$:/SAFESEH> $<$>:/SAFESEH:NO> # Enable AddressSanitizer instrumentation $<$:/fsanitize=address> $<$:/INFERASANLIBS> # Enable/disable Output detailed linking info $<$:/VERBOSE:LIB> ) #------------------------------------------------------------------------------- # Link Libraries #------------------------------------------------------------------------------- # Set the MSVC runtime library variant (debug/release, static/dynamic) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$>:DLL>" )