diff --git a/src/Index.cmake b/src/Index.cmake
index b1585cf5a11b11209d35344e58a76933255727b3..5c46147cf95075dafb59733cf18b3e07170709ca 100644
--- a/src/Index.cmake
+++ b/src/Index.cmake
@@ -2,6 +2,8 @@ cmake_minimum_required (VERSION 3.20 FATAL_ERROR)
 
 include_guard ()
 
+include (${CMAKE_CURRENT_LIST_DIR}/InitProject.cmake)
+
 # Check for CPM
 file (GLOB CPM_MODULE_LOCATION ${CMAKE_BINARY_DIR}/cmake/CPM*.cmake)
 
diff --git a/src/InitProject.cmake b/src/InitProject.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..89fee240ce581cf8d3fd9c64a6895d2bd39a8e4d
--- /dev/null
+++ b/src/InitProject.cmake
@@ -0,0 +1,33 @@
+include_guard ()
+
+# init_project
+# 
+# Sets common settings for a project. These include:
+# 
+# - all debug builds will have the postfix `-d`
+# - the default install directory will be `${CMAKE_CURRENT_BINARY_DIR}/dist`
+# - all output directories will include the current configuration
+# - IDE folders will be turned on for visual studio
+macro (init_project)
+	set (CMAKE_DEBUG_POSTFIX "-d")
+
+	# Set the install root folder if not specified by the user
+	if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+		set (
+			CMAKE_INSTALL_PREFIX
+			${CMAKE_CURRENT_BINARY_DIR}/dist
+			CACHE PATH "Install root directory" FORCE
+		)
+		set (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OFF)
+	endif (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+
+	if (NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY AND WIN32)
+		set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/bin)
+		set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/lib)
+		set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/lib)
+	endif ()
+
+	if (CMAKE_GENERATOR MATCHES "Visual Studio")
+		set_property (GLOBAL PROPERTY USE_FOLDERS ON)
+	endif ()
+endmacro ()