diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4ef49d27542793749afe7f9a93148bb6d6439e6e..bc4226a6393d3bc63ad1ac7b8e1de7d76dbdb00e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,8 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
 
 include(FCLVersion)
 
+option(FCL_STATIC_LIBRARY "Whether the FCL library should be static rather than shared" OFF)
+
 # Whether to enable SSE
 option(FCL_USE_SSE "Whether FCL should SSE instructions" ON)
 set(FCL_HAVE_SSE 0)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4f69c9a1d77badc7069b47d0fd40207cba6ead1b..33cb7fa1e56615cc1ffef094790c5e26f6e17015 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,57 +1,9 @@
-add_library(${PROJECT_NAME} SHARED
-  BV/AABB.cpp
-  BV/OBB.cpp
-  BV/RSS.cpp
-  BV/kIOS.cpp
-  BV/OBBRSS.cpp
-  BV/kDOP.cpp
-  traversal/traversal_node_base.cpp
-  traversal/traversal_node_bvhs.cpp
-  intersect.cpp
-  ccd/motion.cpp
-  BVH/BV_fitter.cpp
-  BVH/BV_splitter.cpp
-  BVH/BVH_model.cpp
-  BVH/BVH_utility.cpp
-  math/transform.cpp
-  traversal/traversal_node_setup.cpp
-  shape/geometric_shapes.cpp
-  shape/geometric_shapes_utility.cpp
-  collision_node.cpp
-  traversal/traversal_recurse.cpp
-  broadphase/broadphase_bruteforce.cpp
-  broadphase/broadphase_spatialhash.cpp
-  broadphase/broadphase_SaP.cpp
-  broadphase/broadphase_SSaP.cpp
-  broadphase/broadphase_interval_tree.cpp
-  broadphase/broadphase_dynamic_AABB_tree.cpp
-  broadphase/broadphase_dynamic_AABB_tree_array.cpp 
-  collision.cpp
-  collision_func_matrix.cpp
-  broadphase/interval_tree.cpp
-  ccd/conservative_advancement.cpp
-  ccd/interval.cpp
-  ccd/interval_vector.cpp
-  ccd/interval_matrix.cpp
-  ccd/taylor_model.cpp
-  ccd/taylor_vector.cpp
-  ccd/taylor_matrix.cpp
-  distance_func_matrix.cpp
-  distance.cpp
-  narrowphase/gjk.cpp
-  narrowphase/gjk_libccd.cpp
-  narrowphase/narrowphase.cpp
-  broadphase/hierarchy_tree.cpp
-  articulated_model/joint_config.cpp
-  articulated_model/joint.cpp
-  articulated_model/link.cpp
-  articulated_model/model_config.cpp
-  articulated_model/model.cpp
-  ccd/interpolation/interpolation.cpp
-  ccd/interpolation/interpolation_factory.cpp
-  ccd/interpolation/interpolation_linear.cpp
-  profile.cpp
-  collision_data.cpp)
+file(GLOB_RECURSE FCL_SOURCE_CODE ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
+if(FCL_STATIC_LIBRARY)
+  add_library(${PROJECT_NAME} STATIC ${FCL_SOURCE_CODE})
+else()
+  add_library(${PROJECT_NAME} SHARED ${FCL_SOURCE_CODE})
+endif()
 
 target_link_libraries(${PROJECT_NAME} ${CCD_LIBRARIES} ${OCTOMAP_LIBRARIES} ${Boost_LIBRARIES})