diff --git a/cmake/OpenCensusHelpers.cmake b/cmake/OpenCensusHelpers.cmake
index c8d35e6..a15231a 100644
--- a/cmake/OpenCensusHelpers.cmake
+++ b/cmake/OpenCensusHelpers.cmake
@@ -38,6 +38,13 @@ function(opencensus_test NAME SRC)
                           gmock
                           gtest_main)
     add_test(NAME ${_NAME} COMMAND ${_NAME})
+    
+    install(
+      TARGETS ${_NAME}
+      RUNTIME DESTINATION tools
+      LIBRARY DESTINATION lib
+      ARCHIVE DESTINATION lib
+    )
   endif()
 endfunction()
 
@@ -51,6 +58,13 @@ function(opencensus_benchmark NAME SRC)
     add_executable(${_NAME} ${SRC})
     prepend_opencensus(DEPS "${ARGN}")
     target_link_libraries(${_NAME} "${DEPS}" benchmark)
+    
+    install(
+      TARGETS ${_NAME}
+      RUNTIME DESTINATION tools
+      LIBRARY DESTINATION lib
+      ARCHIVE DESTINATION lib
+    )
   endif()
 endfunction()
 
@@ -76,6 +90,13 @@ function(opencensus_lib NAME)
   if(ARG_PUBLIC)
     add_library(${PROJECT_NAME}::${NAME} ALIAS ${_NAME})
   endif()
+
+  install(
+    TARGETS ${_NAME}
+    RUNTIME DESTINATION bin
+    LIBRARY DESTINATION lib
+    ARCHIVE DESTINATION lib
+  )
 endfunction()
 
 # Helper function for fuzzing. Usage:
@@ -88,5 +109,12 @@ function(opencensus_fuzzer NAME SRC)
     prepend_opencensus(DEPS "${ARGN}")
     target_link_libraries(${_NAME} "${DEPS}" ${FUZZER})
     target_compile_options(${_NAME} PRIVATE ${FUZZER})
+    
+    install(
+      TARGETS ${_NAME}
+      RUNTIME DESTINATION tools
+      LIBRARY DESTINATION lib
+      ARCHIVE DESTINATION lib
+    )
   endif()
 endfunction()
diff --git a/examples/helloworld/CMakeLists.txt b/examples/helloworld/CMakeLists.txt
index 456169f..71e43d1 100644
--- a/examples/helloworld/CMakeLists.txt
+++ b/examples/helloworld/CMakeLists.txt
@@ -22,3 +22,10 @@ target_link_libraries(opencensus_examples_helloworld
                       opencensus-cpp::stats
                       opencensus-cpp::trace
                       Threads::Threads)
+
+install(
+    TARGETS opencensus_examples_helloworld
+    RUNTIME DESTINATION tools
+    LIBRARY DESTINATION lib
+    ARCHIVE DESTINATION lib
+)
\ No newline at end of file
diff --git a/opencensus/common/internal/CMakeLists.txt b/opencensus/common/internal/CMakeLists.txt
index c18859d..55a1121 100644
--- a/opencensus/common/internal/CMakeLists.txt
+++ b/opencensus/common/internal/CMakeLists.txt
@@ -21,6 +21,8 @@ opencensus_lib(common_random
                absl::base
                absl::synchronization
                absl::time)
+               
+install(FILES ${CMAKE_CURRENT_LIST_DIR}/../version.h DESTINATION include/opencensus-cpp/common/internal)
 
 opencensus_lib(common_stats_object DEPS absl::time)
 
diff --git a/opencensus/context/CMakeLists.txt b/opencensus/context/CMakeLists.txt
index 525885b..537de02 100644
--- a/opencensus/context/CMakeLists.txt
+++ b/opencensus/context/CMakeLists.txt
@@ -21,6 +21,10 @@ opencensus_lib(context
                tags
                trace)
 
+install(FILES ${CMAKE_CURRENT_LIST_DIR}/context.h
+              ${CMAKE_CURRENT_LIST_DIR}/with_context.h
+              DESTINATION include/opencensus-cpp/context)
+
 opencensus_test(context_context_test
                 internal/context_test.cc
                 context
diff --git a/opencensus/exporters/stats/prometheus/CMakeLists.txt b/opencensus/exporters/stats/prometheus/CMakeLists.txt
index 4da7de7..39121f5 100644
--- a/opencensus/exporters/stats/prometheus/CMakeLists.txt
+++ b/opencensus/exporters/stats/prometheus/CMakeLists.txt
@@ -28,6 +28,8 @@ opencensus_lib(exporters_stats_prometheus_utils
                absl::strings
                absl::time
                prometheus-cpp::core)
+               
+install(FILES ${CMAKE_CURRENT_LIST_DIR}/prometheus_exporter.h DESTINATION include/opencensus-cpp/exporters/stats/prometheus)
 
 opencensus_test(exporters_stats_prometheus_utils_test
                 internal/prometheus_utils_test.cc
diff --git a/opencensus/exporters/stats/stdout/CMakeLists.txt b/opencensus/exporters/stats/stdout/CMakeLists.txt
index b4f3110..31bc991 100644
--- a/opencensus/exporters/stats/stdout/CMakeLists.txt
+++ b/opencensus/exporters/stats/stdout/CMakeLists.txt
@@ -21,6 +21,8 @@ opencensus_lib(exporters_stats_stdout
                absl::memory
                absl::strings
                absl::time)
+               
+install(FILES ${CMAKE_CURRENT_LIST_DIR}/stdout_exporter.h DESTINATION include/opencensus-cpp/exporters/stats/stdout)
 
 opencensus_test(exporters_stats_stdout_test
                 internal/stdout_exporter_test.cc
diff --git a/opencensus/exporters/trace/stdout/CMakeLists.txt b/opencensus/exporters/trace/stdout/CMakeLists.txt
index 2b8bc78..fce50e7 100644
--- a/opencensus/exporters/trace/stdout/CMakeLists.txt
+++ b/opencensus/exporters/trace/stdout/CMakeLists.txt
@@ -21,6 +21,7 @@ opencensus_lib(exporters_trace_stdout
                absl::base
                absl::memory)
 
+install(FILES ${CMAKE_CURRENT_LIST_DIR}/stdout_exporter.h DESTINATION include/opencensus-cpp/exporters/trace/stdout)
 opencensus_test(exporters_trace_stdout_test
                 internal/stdout_exporter_test.cc
                 exporters_trace_stdout
diff --git a/opencensus/tags/CMakeLists.txt b/opencensus/tags/CMakeLists.txt
index dbc4c9b..1b304ce 100644
--- a/opencensus/tags/CMakeLists.txt
+++ b/opencensus/tags/CMakeLists.txt
@@ -40,6 +40,8 @@ opencensus_lib(tags_with_tag_map
                context
                absl::strings)
 
+file(GLOB TAGS_HDRS ${CMAKE_CURRENT_LIST_DIR}/*.h)
+install(FILES ${TAGS_HDRS} DESTINATION include/opencensus-cpp/tags)
 opencensus_test(tags_context_util_test
                 internal/context_util_test.cc
                 tags
