diff --git a/CMakeLists.txt b/CMakeLists.txt
index 57f4d16b..089132f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,6 +22,13 @@ if (CMAKE_COMPILER_IS_GNUCC)
     add_definitions(-Wall)
 endif()
 
+#--------------------------------------------------------------------
+# Export shared library / dynamic library / DLL build option
+#--------------------------------------------------------------------
+if (BUILD_SHARED_LIBS)
+    set(_GLFW_BUILD_DLL 1)
+endif()
+
 #--------------------------------------------------------------------
 # Detect and select target platform
 #--------------------------------------------------------------------
@@ -47,6 +54,9 @@ if (_GLFW_WIN32_WGL)
     list(APPEND glfw_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR})
     list(APPEND glfw_LIBRARIES ${OPENGL_gl_LIBRARY})
 
+    set(_GLFW_NO_DLOAD_GDI32 ${BUILD_SHARED_LIBS})
+    set(_GLFW_NO_DLOAD_WINMM ${BUILD_SHARED_LIBS})
+
     if (BUILD_SHARED_LIBS)
         list(APPEND glfw_LIBRARIES winmm)
     endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ac4e98bb..add05982 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -34,7 +34,6 @@ if (BUILD_SHARED_LIBS)
     if (_GLFW_WIN32_WGL)
         # The GLFW DLL needs a special compile-time macro and import library name
         set_target_properties(glfw PROPERTIES 
-                              COMPILE_DEFINITIONS "_GLFW_BUILD_DLL;_GLFW_NO_DLOAD_GDI32;_GLFW_NO_DLOAD_WINMM"
                               PREFIX ""
                               IMPORT_PREFIX ""
                               IMPORT_SUFFIX "dll.lib")
diff --git a/src/cocoa_init.m b/src/cocoa_init.m
index 16bd98eb..594266d1 100644
--- a/src/cocoa_init.m
+++ b/src/cocoa_init.m
@@ -152,7 +152,11 @@ int _glfwPlatformTerminate(void)
 
 const char* _glfwPlatformGetVersionString(void)
 {
-    const char* version = _GLFW_VERSION_FULL " Cocoa";
+    const char* version = _GLFW_VERSION_FULL
+#if defined(_GLFW_BUILD_DLL)
+        " dynamic"
+#endif
+        ;
 
     return version;
 }
diff --git a/src/config.h.in b/src/config.h.in
index 46a6e2aa..b099dd9b 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -42,6 +42,14 @@
 // Define this to 1 if building GLFW for Cocoa/NSOpenGL
 #cmakedefine _GLFW_COCOA_NSGL
 
+// Define this to 1 if building as a shared library / dynamic library / DLL
+#cmakedefine _GLFW_BUILD_DLL       1
+
+// Define this to 1 to disable dynamic loading of gdi32
+#cmakedefine _GLFW_NO_DLOAD_GDI32  1
+// Define this to 1 to disable dynamic loading of winmm
+#cmakedefine _GLFW_NO_DLOAD_WINMM  1
+
 // Define this to 1 if XRandR is available
 #cmakedefine _GLFW_HAS_XRANDR      1
 // Define this to 1 if Xf86VidMode is available
diff --git a/src/x11_init.c b/src/x11_init.c
index 6de30609..8b832d52 100644
--- a/src/x11_init.c
+++ b/src/x11_init.c
@@ -679,6 +679,9 @@ const char* _glfwPlatformGetVersionString(void)
         " Linux-joystick-API"
 #else
         " no-joystick-support"
+#endif
+#if defined(_GLFW_BUILD_DLL)
+        " shared"
 #endif
         ;