diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9addae60ce0d06a7bf154b7632bb26977b6875e6..04667dc9f8ed0707cfabe7f8420a6a47a00f76d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,11 @@ set(PROJECT_NAME hpp-fcl)
 set(PROJECT_DESCRIPTION
   "HPP fork of FCL -- The Flexible Collision Library"
   )
+SET(PROJECT_USE_CMAKE_EXPORT TRUE)
+
+# Do not support CMake older than 2.8.12
+CMAKE_POLICY(SET CMP0022 NEW)
+SET(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE)
 
 include(cmake/eigen.cmake)
 include(cmake/boost.cmake)
@@ -73,16 +78,11 @@ search_for_boost()
 # Optional dependencies
 add_optional_dependency("octomap >= 1.6")
 if (OCTOMAP_FOUND)
-  link_directories(${OCTOMAP_LIBRARY_DIRS})
   SET(HPP_FCL_HAVE_OCTOMAP TRUE)
-  add_definitions (-DHPP_FCL_HAVE_OCTOMAP)
   string(REPLACE "." ";" VERSION_LIST ${OCTOMAP_VERSION})
   list(GET VERSION_LIST 0 OCTOMAP_MAJOR_VERSION)
   list(GET VERSION_LIST 1 OCTOMAP_MINOR_VERSION)
   list(GET VERSION_LIST 2 OCTOMAP_PATCH_VERSION)
-  add_definitions (-DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION}
-                   -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION}
-                   -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION})
   message(STATUS "FCL uses Octomap")
 else()
   SET(HPP_FCL_HAVE_OCTOMAP FALSE)
diff --git a/cmake b/cmake
index 0bb61257d937d82593e372844c1013c2866562d5..8e87406799ea10cfeb90a56f84f3e1ef9c049753 160000
--- a/cmake
+++ b/cmake
@@ -1 +1 @@
-Subproject commit 0bb61257d937d82593e372844c1013c2866562d5
+Subproject commit 8e87406799ea10cfeb90a56f84f3e1ef9c049753
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 498332f12109bae7402d0a701a0ae25fc346f7c3..cbf9dd398ad5f98cce8adaaade82b72075501ae3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -93,7 +93,6 @@ TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_LIBRARIES})
 target_include_directories(${LIBRARY_NAME} SYSTEM PUBLIC
   ${EIGEN3_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
-  $<$<BOOL:${HPP_FCL_HAVE_OCTOMAP}>:${OCTOMAP_INCLUDE_DIRS}>
   )
 
 PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} assimp)
@@ -105,6 +104,15 @@ else()
 endif()
 IF(OCTOMAP_FOUND)
   PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} octomap)
+  target_compile_definitions (${LIBRARY_NAME} PUBLIC
+    -DHPP_FCL_HAVE_OCTOMAP
+    -DOCTOMAP_MAJOR_VERSION=${OCTOMAP_MAJOR_VERSION}
+    -DOCTOMAP_MINOR_VERSION=${OCTOMAP_MINOR_VERSION}
+    -DOCTOMAP_PATCH_VERSION=${OCTOMAP_PATCH_VERSION})
 ENDIF(OCTOMAP_FOUND)
 
-install(TARGETS ${LIBRARY_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})
+target_include_directories(${LIBRARY_NAME} PUBLIC
+  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+install(TARGETS ${LIBRARY_NAME}
+  EXPORT ${TARGETS_EXPORT_NAME}
+  DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 11618f7261a3547f77b7e228614dda392846547c..b9308e3bbba1f72dfc4c3066cb5f6d953d414bb9 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -21,12 +21,12 @@ endmacro(add_fcl_test)
 
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
-add_library(utility STATIC utility.cpp)
-target_include_directories(utility SYSTEM PUBLIC
-  ${EIGEN3_INCLUDE_DIRS}
-  ${Boost_INCLUDE_DIRS}
-  $<$<BOOL:${HPP_FCL_HAVE_OCTOMAP}>:${OCTOMAP_INCLUDE_DIRS}>
-  )
+IF(RUN_TESTS)
+  add_library(utility STATIC utility.cpp)
+ELSE()
+  add_library(utility STATIC EXCLUDE_FROM_ALL utility.cpp)
+ENDIF()
+target_link_libraries(utility hpp-fcl)
 
 add_fcl_test(math math.cpp)