diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..014f292
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,67 @@
+cmake_minimum_required(VERSION 3.31)
+
+# ---- Project ----
+
+project(
+  FunctionTraits
+  VERSION 1.0
+  LANGUAGES CXX)
+
+if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
+   message(
+    FATAL_ERROR
+      "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
+  )
+endif()
+
+add_library(${PROJECT_NAME} INTERFACE)
+
+target_include_directories(
+  ${PROJECT_NAME} INTERFACE $<BUILD_INTERFACE:.> $<INSTALL_INTERFACE:include>)
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+install(FILES FunctionTraits.h FunctionTraits.cppm CompilerVersions.h
+   CompilerVersions.cppm TypeTraits.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/")
+
+file(
+  GENERATE
+  OUTPUT "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc"
+  CONTENT
+    "prefix=${CMAKE_INSTALL_PREFIX}\nincludedir=\$\{prefix\}/include\nName: ${PROJECT_NAME}\nDescription: Professionally written C++ function traits library (single header-only) for retrieving info about any function (arg types, arg count, return type, etc.) \nVersion: ${PROJECT_VERSION}\nCflags: -I\$\{includedir\}\n"
+)
+
+install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc"
+        DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig)
+
+install(
+  TARGETS ${PROJECT_NAME}
+  EXPORT ${PROJECT_NAME}Targets
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+install(
+  EXPORT ${PROJECT_NAME}Targets
+  DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}/
+  NAMESPACE ${PROJECT_NAME}::)
+
+file(
+  WRITE "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in"
+  "@PACKAGE_INIT@\ninclude(\$\{CMAKE_CURRENT_LIST_DIR\}/${PROJECT_NAME}Targets.cmake)"
+)
+
+configure_package_config_file(
+  ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in
+  ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+  INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME})
+
+install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+        DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME})
+
+write_basic_package_version_file(
+  ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+  VERSION ${PROJECT_VERSION}
+  COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT)
+
+install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+        DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME})
