diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aac88a8c6..00dd419b9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,14 +18,15 @@ if (MSVC)
     # Avoid windows.h from including some usually unused libs like winsocks.h, since this might cause some redefinition errors.
     add_definitions(-DWIN32_LEAN_AND_MEAN)
 
-    # /W3             - Level 3 warnings
-    # /MP             - Multi-threaded compilation
-    # /Zi             - Output debugging information
-    # /Zo             - Enhanced debug info for optimized builds
-    # /permissive-    - Enables stricter C++ standards conformance checks
-    # /EHsc           - C++-only exception handling semantics
-    # /Zc:inline      - Let codegen omit inline functions in object files
-    # /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null
+    # /W3                 - Level 3 warnings
+    # /MP                 - Multi-threaded compilation
+    # /Zi                 - Output debugging information
+    # /Zo                 - Enhanced debug info for optimized builds
+    # /permissive-        - Enables stricter C++ standards conformance checks
+    # /EHsc               - C++-only exception handling semantics
+    # /Zc:externConstexpr - Allow extern constexpr variables to have external linkage, like the standard mandates
+    # /Zc:inline          - Let codegen omit inline functions in object files
+    # /Zc:throwingNew     - Let codegen assume `operator new` (without std::nothrow) will never return null
     add_compile_options(
         /W3
         /MP
@@ -34,6 +35,7 @@ if (MSVC)
         /permissive-
         /EHsc
         /std:c++latest
+        /Zc:externConstexpr
         /Zc:inline
         /Zc:throwingNew
     )