From 9870b093b58f4186998da7d11fc238261fd16e10 Mon Sep 17 00:00:00 2001
From: Pascal Palenda <pascal.palenda@akustik.rwth-aachen.de>
Date: Mon, 13 Feb 2023 14:38:30 +0100
Subject: [PATCH] Add common settings for initializing a project

---
 src/Index.cmake       |  2 ++
 src/InitProject.cmake | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)
 create mode 100644 src/InitProject.cmake

diff --git a/src/Index.cmake b/src/Index.cmake
index b1585cf..5c46147 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 0000000..89fee24
--- /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 ()
-- 
GitLab