diff --git a/CMakeLists.txt b/CMakeLists.txt
index be676ba..7a2b6d8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,9 +13,9 @@ set(SO_MAJOR 2)
 set(SO_MINOR 1)
 set(SO_PATCH 0)
 
-add_definitions (
-  -DUTF8PROC_EXPORTS
-)
+if(BUILD_SHARED_LIBS)
+    add_definitions(-DUTF8PROC_EXPORTS -DUTF8PROC_SHARED)
+endif()
 
 if (NOT MSVC)
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -std=c99 -pedantic -Wall")
@@ -31,3 +31,10 @@ set_target_properties (utf8proc PROPERTIES
   VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
   SOVERSION ${SO_MAJOR}
 )
+
+install(TARGETS utf8proc
+    RUNTIME DESTINATION bin
+    ARCHIVE DESTINATION lib
+    LIBRARY DESTINATION lib)
+
+install(FILES utf8proc.h DESTINATION include)
diff --git a/utf8proc.h b/utf8proc.h
index edf46d4..7b3f11a 100644
--- a/utf8proc.h
+++ b/utf8proc.h
@@ -120,13 +120,13 @@ typedef bool utf8proc_bool;
 #endif
 #include <limits.h>
 
-#ifdef _WIN32
+#if defined _WIN32 && defined UTF8PROC_SHARED
 #  ifdef UTF8PROC_EXPORTS
 #    define UTF8PROC_DLLEXPORT __declspec(dllexport)
 #  else
 #    define UTF8PROC_DLLEXPORT __declspec(dllimport)
 #  endif
-#elif __GNUC__ >= 4
+#elif __GNUC__ >= 4 && defined UTF8PROC_SHARED
 #  define UTF8PROC_DLLEXPORT __attribute__ ((visibility("default")))
 #else
 #  define UTF8PROC_DLLEXPORT
