diff --git a/src/qt6ct-common/CMakeLists.txt b/src/qt6ct-common/CMakeLists.txt
index a11c1c1d679ba457ead09add20f7fd97eadd35fa..6f9c6f9275804efa20398cb5efba20cc08146a7e 100644
--- a/src/qt6ct-common/CMakeLists.txt
+++ b/src/qt6ct-common/CMakeLists.txt
@@ -1,5 +1,23 @@
 project(qt6ct-common)
 
+#extract version from qt6ct.h
+file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/qt6ct.h"
+     QT6CT_VERSION_DATA REGEX "^#define[ \t]+QT6CT_VERSION_[A-Z]+[ \t]+[0-9]+.*$")
+
+if(QT6CT_VERSION_DATA)
+  foreach(item IN ITEMS MAJOR MINOR)
+    string(REGEX REPLACE ".*#define[ \t]+QT6CT_VERSION_${item}[ \t]+([0-9]+).*"
+       "\\1" QT6CT_VERSION_${item} ${QT6CT_VERSION_DATA})
+  endforeach()
+  set(QT6CT_VERSION "${QT6CT_VERSION_MAJOR}.${QT6CT_VERSION_MINOR}")
+  set(QT6CT_SOVERSION "${QT6CT_VERSION_MAJOR}")
+  message(STATUS "qt6ct version: ${QT6CT_VERSION}")
+else()
+  message(FATAL_ERROR "invalid header")
+endif()
+
+add_definitions(-DQT6CT_LIBRARY)
+
 set(app_SRCS
   qt6ct.cpp
 )
@@ -7,5 +25,6 @@ set(app_SRCS
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
 
 add_library(qt6ct-common SHARED ${app_SRCS})
+set_target_properties(qt6ct-common PROPERTIES VERSION ${QT6CT_VERSION})
 target_link_libraries(qt6ct-common PRIVATE Qt6::Widgets)
 install(TARGETS qt6ct-common DESTINATION ${CMAKE_INSTALL_LIBDIR})