diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index faad32daf37c4e30ae85b5912710b7663ceb118c..5c12bcb986e780eca270882a12c56e3f5a1736d2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -200,9 +200,14 @@ if(UNIX)
   set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${${PROJECT_NAME}_INSTALL_RPATH}")
 endif()
 
-IF(MSVC)
-  target_compile_options(${PROJECT_NAME} PUBLIC "/bigobj")
-ENDIF()
+cxx_flags_by_compiler_frontend(
+  MSVC "/bigobj"
+  OUTPUT PUBLIC_OPTIONS
+  FILTER)
+target_compile_options(${PROJECT_NAME} PUBLIC ${PUBLIC_OPTIONS})
+
+cxx_flags_by_compiler_frontend(MSVC "NOMINMAX" OUTPUT PUBLIC_DEFINITIONS)
+target_compile_definitions(${PROJECT_NAME} INTERFACE ${PUBLIC_DEFINITIONS})
 
 # IDE sources and headers sorting
 ADD_SOURCE_GROUP(${LIBRARY_NAME}_SOURCES)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 4d4e3c08b25968b4bf277b9b11c7dda4cba1797c..ba83183efdd224a45bc7c758503f0c1178c2ae47 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -13,9 +13,8 @@ function(add_coal_test test_name source)
     Boost::filesystem
     ${utility_target}
     )
-  IF(NOT WIN32)
-    target_compile_options(${target_name} PRIVATE "-Wno-c99-extensions")
-  ENDIF()
+  cxx_flags_by_compiler_frontend(GNU "-Wno-c99-extensions" OUTPUT PRIVATE_OPTIONS)
+  target_compile_options(${target_name} PRIVATE ${PRIVATE_OPTIONS})
   if(COAL_HAS_QHULL)
     target_compile_options(${target_name} PRIVATE -DCOAL_HAS_QHULL)
   endif()