diff --git a/src/IhtaAddLibrary.cmake b/src/IhtaAddLibrary.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a9c4881b8260cbd1b8d3b49720593ae7231bc4df
--- /dev/null
+++ b/src/IhtaAddLibrary.cmake
@@ -0,0 +1,74 @@
+include_guard ()
+
+#[=======================================================================[.rst:
+..command:: ihta_add_library
+
+	Macro to generate doxygen documentation with custom logo and style sheet.
+
+	::
+
+		build_doc(
+			SOURCES <documentation-folder...>
+			[README_MAINPAGE <readme-file-for-main-page>]
+			[COLOR_STYLE <css-style-sheet>]
+			[LOGO <logo-file>]
+			[ADD_DEV_SECTION]
+			[SIDEBAR_ONLY]
+		)
+
+	.. variable:: SIDEBAR_ONLY
+
+		Specifies, that the `doxygen-awesome-css` sidebar ony style should be used.
+
+
+#]=======================================================================]
+macro (ihta_add_library)
+	set (options)
+	set (oneValueArgs NAMESPACE NAME LIBRARY_TYPE INCLUDE_DIR IDE_FOLDER)
+	set (multiValueArgs SOURCES)
+	cmake_parse_arguments (IHTA_ADD_LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+	if (DEFINED IHTA_ADD_LIB_LIBRARY_TYPE)
+		set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED" "INTERFACE" "OBJECT")
+		if (NOT (${IHTA_ADD_LIB_LIBRARY_TYPE} IN_LIST IHTA_ADD_LIB_TYPES))
+			message (
+				FATAL_ERROR
+					"ihta_add_library only supports the following LIBRARY_TYPE's: STATIC, SHARED, INTERFACE or OBJECT"
+			)
+		endif ()
+	endif ()
+
+	if (NOT DEFINED IHTA_ADD_LIB_INCLUDE_DIR)
+		set (IHTA_ADD_LIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
+	endif ()
+
+	if (DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER)
+		set (IHTA_ADD_LIB_IDE_FOLDER ${IHTA_ADD_LIB_NAMESPACE})
+	elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND DEFINED IHTA_ADD_LIB_IDE_FOLDER)
+		set (IHTA_ADD_LIB_NAMESPACE ${IHTA_ADD_LIB_IDE_FOLDER})
+	elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER)
+		message (FATAL_ERROR "ihta_add_library requires to set either a NAMESPACE or an IDE_FOLDER")
+	endif ()
+
+	add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "")
+	add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME})
+
+	target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES})
+
+	# Include Directory
+	target_include_directories (
+		${IHTA_ADD_LIB_NAME} PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}>
+									$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_NAME}>
+	)
+
+	# Required compiler features
+	target_compile_features (${IHTA_ADD_LIB_NAME} PUBLIC cxx_std_17)
+
+	# If build out of parent project, add parent folder library to parent project folder
+	if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+		set_property (TARGET ${IHTA_ADD_LIB_NAME} PROPERTY FOLDER ${IHTA_ADD_LIB_FOLDER})
+	endif ()
+
+	# Organize sources in folders
+	GroupSourcesByFolder (${IHTA_ADD_LIB_NAME})
+endmacro ()
diff --git a/src/Index.cmake b/src/Index.cmake
index 0909b6aae142734a5a7c1be32f9c8eb81b1b81f4..5208ea284fa46df76ee65acfeb371c90bb2ebb34 100644
--- a/src/Index.cmake
+++ b/src/Index.cmake
@@ -23,3 +23,4 @@ include (${CPM_MODULE_LOCATION})
 
 include (${CMAKE_CURRENT_LIST_DIR}/GetCommonLibraries.cmake)
 include (${CMAKE_CURRENT_LIST_DIR}/BuildDoc.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/IhtaAddLibrary.cmake)