diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f83d9079503a2eb00b07e3b137ebe001a5a60b4..7ae58936f4c6ce49703c70d2b5fc0e0898e0fffd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,4 @@
 cmake_minimum_required(VERSION 3.17)
-include(TestBigEndian) # Needed for endianness tests
 
 set(LKT_VERSION 2.4)
 
@@ -7,15 +6,20 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release")
     set(CMAKE_BUILD_TYPE RelWithDebInfo)
 endif()
 
-# Alpho Vivy, CXX only
 project(lektor VERSION ${LKT_VERSION} LANGUAGES C)
+
 cmake_policy(SET CMP0100 NEW)
 cmake_policy(SET CMP0009 NEW)
+
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/utils/cmake/")
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 set(THREADS_PREFER_PTHREAD_FLAG     ON)
-SET(CMAKE_COLOR_MAKEFILE            ON)
+set(CMAKE_COLOR_MAKEFILE            ON)
+
+include(TestBigEndian)  # Needed for endianness tests
+include(GNUInstallDirs) # Needed for installation things
 
+set(${CMAKE_C_COMPILER_ID}_C_FLAGS)
 set(COMMON_C_FLAGS
     -Wall -Wextra -Werror
     -Wshadow
@@ -28,11 +32,9 @@ set(COMMON_C_FLAGS
     -Wdouble-promotion
     -Wformat=2
     -Wignored-qualifiers
-
     -fopenmp
 )
-
-set(clang_C_FLAGS
+set(Clang_C_FLAGS
     -Weverything
     -Wpedantic
     -Wno-extra-semi-stmt
@@ -49,11 +51,16 @@ set(clang_C_FLAGS
     -Wno-format-nonliteral
     -Wno-missing-variable-declarations
     -Wno-unknown-warning-option
+    -fcolor-diagnostics
+)
+set(GNU_C_FLAGS
+    -fdiagnostics-color=always
 )
 
-set(gnu_C_FLAGS)
+###               ###
+# FIND DEPENDENCIES #
+###               ###
 
-# Find dependencies
 find_library(MPV_LIBRARY        mpv         REQUIRED)                   # tested with 0.32.0
 find_library(SQLITE3_LIBRARY    sqlite3     REQUIRED version>=3.31.0)   # tested with 3.34.1
 
@@ -64,6 +71,8 @@ find_package(CURL                           REQUIRED HTTP HTTPS)        # tested
 find_program(MKVPROPEDIT        mkvpropedit REQUIRED)   # To DL karas and apply metadata
 find_program(XXD                xxd         REQUIRED)   # To embed the sqlite db schemas into the binary
 
+message(STATUS "The installation prefix is ${CMAKE_INSTALL_PREFIX}")
+
 TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
 if(IS_BIG_ENDIAN)
     set(LKT_ENDIANES_BIG 1)
@@ -93,9 +102,9 @@ if(UNIX AND NOT APPLE)
     set(GENERATE_MANPAGES 1)
 endif()
 
-##################
-# Grab all files #
-##################
+###            ###
+# GRAB ALL FILES #
+###            ###
 
 set(lektor_db_SOURCES
     src/database/queue.c
@@ -216,9 +225,9 @@ set(SQL_SOURCE_FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/src/database/memory.sql
 )
 
-#######################
-# Set all the targets #
-#######################
+###                        ###
+# THE COMPILATION DIRECTIVES #
+###                        ###
 
 add_custom_command(OUTPUT ${SQL_GENERATED_FILE}
     COMMAND ${CMAKE_COMMAND} -E touch ${SQL_GENERATED_FILE}
@@ -238,13 +247,17 @@ add_executable(lektord ${lektord_SOURCES} ${SQL_GENERATED_FILE})
 add_executable(lkt     ${lkt_SOURCES})
 add_executable(luka    ${luka_SOURCES} ${SQL_GENERATED_FILE})
 
+set(MANPAGES_COMMANDS)
 if(GENERATE_MANPAGES)
     message(STATUS "Generating manpages")
     set(MANPAGE_COMMANDS lkt lektord lektor luka)
 
     foreach(CMD IN LISTS MANPAGE_COMMANDS)
         add_custom_target(manpage_cmd_${CMD} ALL
-            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/utils/scripts/manpage.bash ${CMAKE_CURRENT_SOURCE_DIR}/man/${CMD}.template ${CMAKE_CURRENT_BINARY_DIR}/${CMD}.1 ${CMAKE_CURRENT_SOURCE_DIR}/man/footer
+            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/utils/scripts/manpage.bash
+                    ${CMAKE_CURRENT_SOURCE_DIR}/man/${CMD}.template
+                    ${CMAKE_CURRENT_BINARY_DIR}/${CMD}.1
+                    ${CMAKE_CURRENT_SOURCE_DIR}/man/footer
             DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/man/${CMD}.template ${CMAKE_CURRENT_SOURCE_DIR}/man/footer
             COMMENT "Generating manpage for command ${CMD}"
         )
@@ -282,10 +295,6 @@ target_include_directories(lektord PRIVATE
     ${CURL_INCLUDE_DIRS}
 )
 
-target_compile_options(lektord     PRIVATE ${COMMON_C_FLAGS})
-target_compile_options(lkt         PRIVATE ${COMMON_C_FLAGS})
-target_compile_options(luka        PRIVATE ${COMMON_C_FLAGS})
-
 target_link_libraries(lektord      PRIVATE -fopenmp)
 target_link_libraries(luka         PRIVATE -fopenmp)
 
@@ -297,18 +306,23 @@ target_precompile_headers(lektord  PRIVATE ${common_HEADERS})
 target_precompile_headers(lkt      PRIVATE ${common_HEADERS})
 target_precompile_headers(luka     PRIVATE ${common_HEADERS})
 
-if (${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
-    target_compile_options(lektord PRIVATE ${clang_C_FLAGS})
-    target_compile_options(lkt     PRIVATE ${clang_C_FLAGS})
-    target_compile_options(luka    PRIVATE ${clang_C_FLAGS})
+target_compile_options(lektord PRIVATE ${COMMON_C_FLAGS} ${${CMAKE_C_COMPILER_ID}_C_FLAGS})
+target_compile_options(lkt     PRIVATE ${COMMON_C_FLAGS} ${${CMAKE_C_COMPILER_ID}_C_FLAGS})
+target_compile_options(luka    PRIVATE ${COMMON_C_FLAGS} ${${CMAKE_C_COMPILER_ID}_C_FLAGS})
 
-    # Force the color output
-    add_compile_options(-fcolor-diagnostics)
-elseif (${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
-    target_compile_options(lektord PRIVATE ${gnu_C_FLAGS})
-    target_compile_options(lkt     PRIVATE ${gnu_C_FLAGS})
-    target_compile_options(luka    PRIVATE ${gnu_C_FLAGS})
+###                    ###
+# THE INSTALL DIRECTIVES #
+###                    ###
 
-    # Force the color output
-    add_compile_options(-fdiagnostics-color=always)
-endif()
+install(TARGETS lektord lkt luka
+    RUNTIME # For lektord
+    RUNTIME # For lkt
+    RUNTIME # For luka
+)
+
+foreach(CMD IN LISTS MANPAGE_COMMANDS)
+    install(FILES
+        ${CMAKE_CURRENT_BINARY_DIR}/${CMD}.1     # The manpage to install
+        DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 # A cat 1 manpage
+    )
+endforeach()