diff --git a/CMake/GeneratePkgConfig.cmake b/CMake/GeneratePkgConfig.cmake
index a2800e107333..57e59ca749f1 100644
--- a/CMake/GeneratePkgConfig.cmake
+++ b/CMake/GeneratePkgConfig.cmake
@@ -89,5 +89,13 @@ CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"
 Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
 ${REQUIRES}${LIBRARIES}")
 
-  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+  get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
+  if (NOT (LIBRARY_TYPE STREQUAL STATIC_LIBRARY OR LIBRARY_TYPE STREQUAL SHARED_LIBRARY))
+    message(FATAL_ERROR "Don't know how to handle ${TARGET} of type ${LIBRARY_TYPE}")
+  endif()
+  if (NOT TD_ENABLE_FILTERED_INSTALL
+    OR (LIBRARY_TYPE STREQUAL SHARED_LIBRARY AND BUILD_SHARED_LIBS)
+    OR (LIBRARY_TYPE STREQUAL STATIC_LIBRARY AND NOT BUILD_SHARED_LIBS))
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+  endif()
 endfunction()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27e8a26229af..818495b21e3b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,7 @@ endif()
 include(PreventInSourceBuild)
 prevent_in_source_build()
 
+option(TD_ENABLE_FILTERED_INSTALL "Use \"ON\" to limit installation to files (libraries, dev files) relevant for the chosen \"BUILD_SHARED_LIBS\" value." OFF)
 option(TD_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TDLib API.")
 option(TD_ENABLE_DOTNET "Use \"ON\" to enable generation of C++/CLI or C++/CX TDLib API bindings.")
 if (NOT CMAKE_CROSSCOMPILING)
@@ -1310,18 +1311,22 @@ add_library(Td::TdJsonStatic ALIAS TdJsonStatic)
 set(INSTALL_TARGETS tdjson TdJson)
 set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private "${TD_CORE_PART_TARGETS}" tdcore tdmtproto tdclient TdStatic tdapi)
 
-install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
-  INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
+  install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+  )
+endif()
 
-install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+  )
+endif()
 
 # generate pkg-config files
 include(GeneratePkgConfig)
@@ -1346,16 +1351,21 @@ generate_pkgconfig(tdjson_private "Telegram Library - JSON interface (private)")
 generate_pkgconfig(tdjson "Telegram Library - JSON interface (shared)")
 generate_pkgconfig(tdjson_static "Telegram Library - JSON interface (static)")
 
-install(EXPORT TdTargets
-  FILE TdTargets.cmake
-  NAMESPACE Td::
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
-)
-install(EXPORT TdStaticTargets
-  FILE TdStaticTargets.cmake
-  NAMESPACE Td::
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
+  install(EXPORT TdTargets
+    FILE TdTargets.cmake
+    NAMESPACE Td::
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
+  )
+endif()
+
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(EXPORT TdStaticTargets
+    FILE TdStaticTargets.cmake
+    NAMESPACE Td::
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
+  )
+endif()
 
 # Install tdjson/tdjson_static:
 install(FILES ${TD_JSON_HEADERS} "${CMAKE_CURRENT_BINARY_DIR}/td/telegram/tdjson_export.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/td/telegram")
diff --git a/TdConfig.cmake b/TdConfig.cmake
index cbe7a0348fcb..807a840edf6f 100644
--- a/TdConfig.cmake
+++ b/TdConfig.cmake
@@ -1,6 +1,8 @@
 include(CMakeFindDependencyMacro)
 #TODO: write all external dependencies
-include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+  include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+endif()
 if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
   include("${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
 endif()
diff --git a/sqlite/CMakeLists.txt b/sqlite/CMakeLists.txt
index 82ceb04c8c3d..539eb631e466 100644
--- a/sqlite/CMakeLists.txt
+++ b/sqlite/CMakeLists.txt
@@ -70,7 +70,9 @@ elseif (MSVC)
   target_compile_options(tdsqlite PRIVATE /wd4996)
 endif()
 
-install(TARGETS tdsqlite EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdsqlite EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
diff --git a/tdactor/CMakeLists.txt b/tdactor/CMakeLists.txt
index 2a7c68f5d30c..0b0ecd1dbf9b 100644
--- a/tdactor/CMakeLists.txt
+++ b/tdactor/CMakeLists.txt
@@ -51,7 +51,9 @@ if (NOT CMAKE_CROSSCOMPILING)
   target_link_libraries(example PRIVATE tdactor)
 endif()
 
-install(TARGETS tdactor EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdactor EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
diff --git a/tddb/CMakeLists.txt b/tddb/CMakeLists.txt
index 85573170dc67..7f9d40a8424d 100644
--- a/tddb/CMakeLists.txt
+++ b/tddb/CMakeLists.txt
@@ -55,7 +55,9 @@ if (NOT CMAKE_CROSSCOMPILING)
   target_link_libraries(binlog_dump PRIVATE tddb)
 endif()
 
-install(TARGETS tddb EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tddb EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
diff --git a/tdnet/CMakeLists.txt b/tdnet/CMakeLists.txt
index 0e35c9722643..fead65f0b1b3 100644
--- a/tdnet/CMakeLists.txt
+++ b/tdnet/CMakeLists.txt
@@ -80,7 +80,9 @@ if (APPLE_WATCH)
   target_link_libraries(tdnet PRIVATE ${FOUNDATION_LIBRARY})
 endif()
 
-install(TARGETS tdnet EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdnet EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
diff --git a/tdutils/CMakeLists.txt b/tdutils/CMakeLists.txt
index 4760aab011b5..4b6ac1c2a08e 100644
--- a/tdutils/CMakeLists.txt
+++ b/tdutils/CMakeLists.txt
@@ -409,10 +409,12 @@ if (ATOMICS_LIBRARIES)
   target_link_libraries(tdutils PUBLIC "${ATOMICS_LIBRARIES}")
 endif()
 
-install(TARGETS tdutils EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdutils EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
 
 if (TD_TEST_FOLLY AND ABSL_FOUND AND TDUTILS_USE_EXTERNAL_DEPENDENCIES)
   find_package(benchmark QUIET)