diff --git a/CMakeLists.txt b/CMakeLists.txt
index 26118eb..ccda00b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -141,7 +141,12 @@ set(XEUS_SOURCES
 # Output
 # ======
 
-add_library(xeus SHARED ${XEUS_SOURCES} ${XEUS_HEADERS})
+option(BUILD_SHARED_LIBS "Build shared instead of static libraries." ON)
+if (BUILD_SHARED_LIBS)
+    add_library(xeus SHARED ${XEUS_SOURCES} ${XEUS_HEADERS})
+else ()
+    add_library(xeus STATIC ${XEUS_SOURCES} ${XEUS_HEADERS})
+endif ()
 
 if (APPLE)
     set_target_properties(xeus PROPERTIES
@@ -166,9 +171,9 @@ target_link_libraries(xeus
 
 OPTION(XEUS_USE_SHARED_CRYPTOPP "Used shared library for cryptopp" OFF)
 if (XEUS_USE_SHARED_CRYPTOPP)
-    target_link_libraries(xeus PRIVATE cryptopp-shared)
+    target_link_libraries(xeus PUBLIC cryptopp-shared)
 else ()
-    target_link_libraries(xeus PRIVATE cryptopp-static)
+    target_link_libraries(xeus PUBLIC cryptopp-static)
 endif ()
 
 if(NOT MSVC)
@@ -226,6 +231,10 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"
     message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
 endif()
 
+if (NOT BUILD_SHARED_LIBS)
+    target_compile_definitions(xeus PUBLIC XEUS_STATIC_LIB)
+endif ()
+
 if(MSVC)
     target_compile_definitions(xeus PUBLIC -DNOMINMAX)
     target_compile_options(xeus PUBLIC /DGUID_WINDOWS /MP /bigobj)
diff --git a/include/xeus/xeus.hpp b/include/xeus/xeus.hpp
index 99e1d79..522bb78 100644
--- a/include/xeus/xeus.hpp
+++ b/include/xeus/xeus.hpp
@@ -10,10 +10,14 @@
 #define XEUS_EXPORT_HPP
 
 #ifdef _WIN32
-    #ifdef XEUS_EXPORTS
-        #define XEUS_API __declspec(dllexport)
+    #ifdef XEUS_STATIC_LIB
+        #define XEUS_API
     #else
-        #define XEUS_API __declspec(dllimport)
+        #ifdef XEUS_EXPORTS
+            #define XEUS_API __declspec(dllexport)
+        #else
+            #define XEUS_API __declspec(dllimport)
+        #endif
     #endif
 #else
     #define XEUS_API
