diff --git a/CMakeLists.txt b/CMakeLists.txt
index c0f7d32..8446f3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,6 +59,22 @@ target_include_directories(glui_obj
 # create static *and* shared libraries without double compilation
 set_target_properties( glui_obj PROPERTIES POSITION_INDEPENDENT_CODE 1)
 
+if (MSVC)
+    target_compile_options(glui_obj
+        PRIVATE
+            /D_CRT_SECURE_NO_WARNINGS
+            /wd4244
+            /wd4305
+    )
+endif()
+
+if(BUILD_SHARED_LIBS)
+    if(WIN32)
+        target_compile_definitions(glui_obj
+            PRIVATE GLUI_BUILDING_LIB
+            PUBLIC GLUIDLL
+        )
+    endif()
 add_library(glui SHARED $<TARGET_OBJECTS:glui_obj>)
 target_include_directories(glui
       PUBLIC
@@ -71,7 +87,7 @@ set_target_properties(glui PROPERTIES
   DEBUG_POSTFIX "d"
   VERSION ${PROJECT_VERSION}
   SOVERSION ${PROJECT_VERSION})
-
+else()
 add_library(glui_static STATIC $<TARGET_OBJECTS:glui_obj>)
 target_include_directories(glui_static
       PUBLIC
@@ -81,7 +97,9 @@ target_include_directories(glui_static
       ${GLUT_INCLUDE_DIR})
 target_link_libraries(glui_static PUBLIC ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
 set_target_properties(glui_static PROPERTIES DEBUG_POSTFIX "d")
+endif()
 
+if(GLUI_BUILD_EXAMPLES)
 add_executable(ppm2array tools/ppm.cpp tools/ppm2array.cpp)
 target_link_libraries(ppm2array)
 
@@ -97,7 +115,7 @@ add_executable(example5 example/example5.cpp)
 target_link_libraries(example5 glui_static ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
 add_executable(example6 example/example6.cpp)
 target_link_libraries(example6 glui_static ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
-
+endif()
 
 
 ####
@@ -130,8 +148,13 @@ configure_package_config_file(
 )
 
 # Targets:
+if(BUILD_SHARED_LIBS)
+    set(glui_target glui)
+else()
+    set(glui_target glui_static)
+endif()
 install(
-    TARGETS glui_static glui
+    TARGETS ${glui_target}
     EXPORT "${targets_export_name}"
     LIBRARY DESTINATION "lib"
     ARCHIVE DESTINATION "lib"