diff --git a/CMakeLists.txt b/CMakeLists.txt
index d6fcaa5422565cc52d954c1c472161eeb24da144..23fbc571b1114d0517b6f1048b0cd7a52f327a2a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -313,6 +313,8 @@ message(STATUS "summary of build options:
       CXXFLAGS:       ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS}
       WARNCFLAGS:     ${WARNCFLAGS}
       WARNCXXFLAGS:   ${WARNCXXFLAGS}
+    Library:
+      Shared:         ${BUILD_SHARED_LIBS}
     Test:
       CUnit:          ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}')
     Libs:
diff --git a/CMakeOptions.txt b/CMakeOptions.txt
index 6172d30791f54623ab180743f057f1d895fb0b28..92c41fe9481f3465d4b806f84599dd54525bd80c 100644
--- a/CMakeOptions.txt
+++ b/CMakeOptions.txt
@@ -1,5 +1,7 @@
 # Features that can be enabled for cmake (see CMakeLists.txt)
 
+option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
+
 option(ENABLE_WERROR    "Make compiler warnings fatal" OFF)
 option(ENABLE_DEBUG     "Turn on debug output" OFF)
 option(ENABLE_ASAN      "Enable AddressSanitizer (ASAN)" OFF)
diff --git a/crypto/gnutls/CMakeLists.txt b/crypto/gnutls/CMakeLists.txt
index bf5cfd8c6e2406a2399a31fed039ca1a0965ed19..575fc3febde9b6a4e6cdce3a7c80e718c9e0e986 100644
--- a/crypto/gnutls/CMakeLists.txt
+++ b/crypto/gnutls/CMakeLists.txt
@@ -41,7 +41,7 @@ foreach(name libngtcp2_crypto_gnutls.pc)
   configure_file("${name}.in" "${name}" @ONLY)
 endforeach()
 
-# Public shared library
+# Public shared or static library
 add_library(ngtcp2_crypto_gnutls ${ngtcp2_crypto_gnutls_SOURCES})
 set_target_properties(ngtcp2_crypto_gnutls PROPERTIES
   COMPILE_FLAGS "${WARNCFLAGS}"
diff --git a/crypto/openssl/CMakeLists.txt b/crypto/openssl/CMakeLists.txt
index 430693aa6691777664140b1bade1cb24d9840bed..a12d93aa959addb517ea3811387454bbaf845df2 100644
--- a/crypto/openssl/CMakeLists.txt
+++ b/crypto/openssl/CMakeLists.txt
@@ -41,7 +41,7 @@ foreach(name libngtcp2_crypto_openssl.pc)
   configure_file("${name}.in" "${name}" @ONLY)
 endforeach()
 
-# Public shared library
+# Public shared or static library
 add_library(ngtcp2_crypto_openssl ${ngtcp2_crypto_openssl_SOURCES})
 set_target_properties(ngtcp2_crypto_openssl PROPERTIES
   COMPILE_FLAGS "${WARNCFLAGS}"
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 6f8f6f45831a6dd05bf947013a772fd9e342a5d8..fc3d8cfde335c9bf5f77ff68f2c0a97fd6c6062f 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -64,7 +64,7 @@ set(ngtcp2_INCLUDE_DIRS
   "${CMAKE_CURRENT_BINARY_DIR}/includes"
 )
 
-# Public shared library
+# Public shared or static library
 add_library(ngtcp2 ${ngtcp2_SOURCES})
 set_target_properties(ngtcp2 PROPERTIES
   COMPILE_FLAGS "${WARNCFLAGS}"
@@ -79,7 +79,7 @@ if(NOT BUILD_SHARED_LIBS)
 endif()
 
 if(HAVE_CUNIT)
-  # Static library (for unittests because of symbol visibility)
+  # Private static library (for unittests because of symbol visibility)
   add_library(ngtcp2_static STATIC ${ngtcp2_SOURCES})
   set_target_properties(ngtcp2_static PROPERTIES
     COMPILE_FLAGS "${WARNCFLAGS}"