diff --git a/.cmake-format.yaml b/.cmake-format.yaml
index 0c4294e388e556b8c32dc630cf08281c8e50ed3a..fb5a054abb7b594535793ccf668d9ac1324d34b8 100644
--- a/.cmake-format.yaml
+++ b/.cmake-format.yaml
@@ -3,6 +3,11 @@ format:
   max_subgroups_hwrap: 3
   dangle_parens: true
   command_case: "unchanged"
+lint:
+  disabled_codes:
+  - "C0301"
+  - "C0301"    # Line to long.
+  - "C0113"    # Missing COMMAND for optional dependencies.
 
 parse:
   additional_commands:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6c98e0c7198a2bd2d2788a004466d4b0c2df64f1..4fe13c3021404cdbc58145a891bfc6aad346414e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -42,3 +42,12 @@ repos:
     hooks:
     -   id: codespell
         exclude: 'ThirdParty/.*|Tests/Data/.*|.*\.ya?ml|.*\.bib|^web/content/imprint.md|^GeoLib/IO/XmlIO/OpenGeoSysSTN.xsd|^Applications/FileIO/Legacy/OGSIOVer4.cpp'
+-   repo: https://github.com/cheshirekow/cmake-format-precommit
+    rev: v0.6.13
+    hooks:
+    - id: cmake-format
+      additional_dependencies: ["cmakelang[YAML]"]
+      exclude: '.*' # Disabled for now
+    - id: cmake-lint
+      additional_dependencies: ["cmakelang[YAML]"]
+      exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake'
diff --git a/Applications/ApplicationsLib/CMakeLists.txt b/Applications/ApplicationsLib/CMakeLists.txt
index e59e90c776bf3bf122e13670274c0b843cd8c429..dabcefc541e5bc8ce67ff371e53bdb8fab64aa44 100644
--- a/Applications/ApplicationsLib/CMakeLists.txt
+++ b/Applications/ApplicationsLib/CMakeLists.txt
@@ -5,30 +5,31 @@ set(LIB_SOURCES ${SOURCES_APPLICATIONSLIB})
 # Library
 ogs_add_library(ApplicationsLib ${LIB_SOURCES})
 
-target_link_libraries(ApplicationsLib
-                      PUBLIC BaseLib GeoLib NumLib Processes
-                      PRIVATE CMakeInfoLib
-                              MathLib
-                              MeshLib
-                              MeshGeoToolsLib
-                              ParameterLib
-                              ProcessLib
-                              spdlog::spdlog
-                              $<$<BOOL:${OGS_USE_PYTHON}>:pybind11::pybind11>
+target_link_libraries(
+    ApplicationsLib
+    PUBLIC BaseLib GeoLib NumLib Processes
+    PRIVATE CMakeInfoLib
+            MathLib
+            MeshLib
+            MeshGeoToolsLib
+            ParameterLib
+            ProcessLib
+            spdlog::spdlog
+            $<$<BOOL:${OGS_USE_PYTHON}>:pybind11::pybind11>
 )
 
-target_compile_definitions(ApplicationsLib
-    PUBLIC
-    $<$<BOOL:${USE_LIS}>:USE_LIS>
-    $<$<BOOL:${OGS_USE_PETSC}>:USE_PETSC>
+target_compile_definitions(
+    ApplicationsLib PUBLIC $<$<BOOL:${USE_LIS}>:USE_LIS>
+                           $<$<BOOL:${OGS_USE_PETSC}>:USE_PETSC>
 )
 
 # Set cpp definitions if the cmake option is enabled for the given process.
-foreach(process ${ProcessesList})
+foreach(process ${_processes_list})
     if(OGS_BUILD_PROCESS_${process})
         string(TOUPPER "OGS_BUILD_PROCESS_${process}" EnableProcess)
-        set_property(TARGET ApplicationsLib
-                     APPEND
-                     PROPERTY COMPILE_DEFINITIONS ${EnableProcess})
+        set_property(
+            TARGET ApplicationsLib APPEND PROPERTY COMPILE_DEFINITIONS
+                                                   ${EnableProcess}
+        )
     endif()
 endforeach()
diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt
index c731e6e48d889da77ced75bd5908be439d3b576b..5c5757c3b114d38dbd771974514c7c72562297a0 100644
--- a/Applications/CMakeLists.txt
+++ b/Applications/CMakeLists.txt
@@ -2,11 +2,11 @@ add_subdirectory(ApplicationsLib)
 add_subdirectory(DataHolderLib)
 add_subdirectory(FileIO)
 
-if(OGS_BUILD_UTILS AND NOT IS_SUBPROJECT)
+if(OGS_BUILD_UTILS AND NOT _IS_SUBPROJECT)
     add_subdirectory(Utils)
 elseif(OGS_BUILD_GUI)
     add_subdirectory(Utils/OGSFileConverter)
-endif() # OGS_BUILD_UTILS AND NOT IS_SUBPROJECT
+endif() # OGS_BUILD_UTILS AND NOT _IS_SUBPROJECT
 
 if(OGS_BUILD_GUI)
     add_subdirectory(DataExplorer)
diff --git a/Applications/DataExplorer/VtkVis/CMakeLists.txt b/Applications/DataExplorer/VtkVis/CMakeLists.txt
index 9d631187492a239c94e1325a4b6bdec817228e8a..7d7d42ad4d5da697faee33107f01057b2274d9e1 100644
--- a/Applications/DataExplorer/VtkVis/CMakeLists.txt
+++ b/Applications/DataExplorer/VtkVis/CMakeLists.txt
@@ -154,7 +154,7 @@ if(OGS_USE_NETCDF)
     if(NOT OGS_USE_CONAN)
         target_include_directories(VtkVis SYSTEM
                                    PUBLIC ${NETCDF_INCLUDES_C}
-                                   PUBLIC ${NETCDF_INCLUDES_CXX})
+                                          ${NETCDF_INCLUDES_CXX})
     endif()
 endif()
 
diff --git a/Applications/Utils/FileConverter/CMakeLists.txt b/Applications/Utils/FileConverter/CMakeLists.txt
index ee4df28cbc5714ea245116849fb0d9a4199dc3fb..c30b903c33338a21c82ee8b5b909ac306af1e4fd 100644
--- a/Applications/Utils/FileConverter/CMakeLists.txt
+++ b/Applications/Utils/FileConverter/CMakeLists.txt
@@ -9,7 +9,8 @@ set(TOOLS
     TecPlotTools
     GocadSGridReader
     GocadTSurfaceReader
-    Mesh2Raster)
+    Mesh2Raster
+)
 
 if(OGS_USE_NETCDF)
     list(APPEND TOOLS NetCdfConverter)
@@ -19,10 +20,11 @@ if(OGS_BUILD_GUI)
     list(APPEND TOOLS ConvertSHPToGLI FEFLOW2OGS Mesh2Shape)
 endif()
 
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL} ApplicationsFileIO GitInfoLib MeshLib
-        MeshGeoToolsLib tclap)
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(
+        ${tool} ApplicationsFileIO GitInfoLib MeshLib MeshGeoToolsLib tclap
+    )
 endforeach()
 set_target_properties(${TOOLS} PROPERTIES FOLDER Utilities)
 install(TARGETS ${TOOLS} RUNTIME DESTINATION bin)
@@ -32,11 +34,9 @@ if(TARGET ConvertSHPToGLI)
 endif()
 
 if(TARGET NetCdfConverter)
-    target_link_libraries(NetCdfConverter
-                          ${NETCDF_LIBRARIES_CXX}
-                          ${NETCDF_LIBRARIES_C}
-                          ${HDF5_HL_LIBRARIES}
-                          ${HDF5_LIBRARIES}
+    target_link_libraries(
+        NetCdfConverter ${NETCDF_LIBRARIES_CXX} ${NETCDF_LIBRARIES_C}
+        ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}
     )
     if(OGS_USE_CONAN AND MSVC)
         target_link_libraries(NetCdfConverter ${CONAN_LIBS})
diff --git a/Applications/Utils/GeoTools/CMakeLists.txt b/Applications/Utils/GeoTools/CMakeLists.txt
index a6e624fb15743d107f8a3659a37eca85d82a6c37..71724aec72bde8992170b0677e1f9635b2fabb36 100644
--- a/Applications/Utils/GeoTools/CMakeLists.txt
+++ b/Applications/Utils/GeoTools/CMakeLists.txt
@@ -3,14 +3,11 @@ if(NOT OGS_BUILD_GUI)
 endif()
 
 set(TOOLS MoveGeometry TriangulatePolyline)
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL}
-                          GeoLib
-                          GitInfoLib
-                          ApplicationsFileIO
-                          tclap
-                          Qt5::Core)
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(
+        ${tool} GeoLib GitInfoLib ApplicationsFileIO tclap Qt5::Core
+    )
 endforeach()
 set_target_properties(${TOOLS} PROPERTIES FOLDER Utilities)
 install(TARGETS ${TOOLS} RUNTIME DESTINATION bin)
diff --git a/Applications/Utils/MeshEdit/CMakeLists.txt b/Applications/Utils/MeshEdit/CMakeLists.txt
index 8155924cf64ef97f786dc283ea9148c8b5d328b8..ae507cab6c9e33971212e7df4c2390793fc374c3 100644
--- a/Applications/Utils/MeshEdit/CMakeLists.txt
+++ b/Applications/Utils/MeshEdit/CMakeLists.txt
@@ -35,9 +35,9 @@ if(OGS_BUILD_GUI)
     install(TARGETS RemoveGhostData RUNTIME DESTINATION bin)
 endif()
 
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL} GitInfoLib MeshLib tclap)
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(${tool} GitInfoLib MeshLib tclap)
 endforeach()
 set_target_properties(${TOOLS} PROPERTIES FOLDER Utilities)
 install(TARGETS ${TOOLS} RUNTIME DESTINATION bin)
diff --git a/Applications/Utils/MeshGeoTools/CMakeLists.txt b/Applications/Utils/MeshGeoTools/CMakeLists.txt
index 6f2c2850fa019143a893348ea0b9bcafdab526cd..bf2fe19ce8ae1259c04d5a4fa5d9ea6df3481b58 100644
--- a/Applications/Utils/MeshGeoTools/CMakeLists.txt
+++ b/Applications/Utils/MeshGeoTools/CMakeLists.txt
@@ -14,14 +14,10 @@ if(OGS_BUILD_GUI)
     list(APPEND TOOLS VerticalSliceFromLayers)
 endif()
 
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL}
-                          ApplicationsFileIO
-                          GitInfoLib
-                          MeshLib
-                          MeshGeoToolsLib
-                          tclap
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(
+        ${tool} ApplicationsFileIO GitInfoLib MeshLib MeshGeoToolsLib tclap
     )
 endforeach()
 
diff --git a/Applications/Utils/ModelPreparation/CMakeLists.txt b/Applications/Utils/ModelPreparation/CMakeLists.txt
index e541621a4e15d081ede3740f7105c974edf056b8..52759dc9944b5239a43e3adc89239c43ce392731 100644
--- a/Applications/Utils/ModelPreparation/CMakeLists.txt
+++ b/Applications/Utils/ModelPreparation/CMakeLists.txt
@@ -1,8 +1,9 @@
 set(TOOLS ComputeNodeAreasFromSurfaceMesh convertVtkDataArrayToVtkDataArray
-          createNeumannBc scaleProperty)
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL} GitInfoLib MeshLib tclap)
+          createNeumannBc scaleProperty
+)
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(${tool} GitInfoLib MeshLib tclap)
 endforeach()
 set_target_properties(${TOOLS} PROPERTIES FOLDER Utilities)
 install(TARGETS ${TOOLS} RUNTIME DESTINATION bin)
diff --git a/Applications/Utils/SimpleMeshCreation/CMakeLists.txt b/Applications/Utils/SimpleMeshCreation/CMakeLists.txt
index 32a4f2a324f75e4eb4a77cc5a99c9c4b88e31fa8..489364e8222d9d666454d9a35ff8e0829ee92747 100644
--- a/Applications/Utils/SimpleMeshCreation/CMakeLists.txt
+++ b/Applications/Utils/SimpleMeshCreation/CMakeLists.txt
@@ -3,9 +3,9 @@ if(OGS_BUILD_GUI)
     list(APPEND TOOLS createMeshElemPropertiesFromASCRaster)
 endif()
 
-foreach(TOOL ${TOOLS})
-    add_executable(${TOOL} ${TOOL}.cpp)
-    target_link_libraries(${TOOL} ApplicationsFileIO GitInfoLib MeshLib tclap)
+foreach(tool ${TOOLS})
+    add_executable(${tool} ${tool}.cpp)
+    target_link_libraries(${tool} ApplicationsFileIO GitInfoLib MeshLib tclap)
 endforeach()
 set_target_properties(${TOOLS} PROPERTIES FOLDER Utilities)
 install(TARGETS ${TOOLS} RUNTIME DESTINATION bin)
diff --git a/Applications/Utils/Tests.cmake b/Applications/Utils/Tests.cmake
index cb08f5a929c00381be6b689935adb1548cf9100a..83b49f6623639065c04fe2f8835830ad942280b3 100644
--- a/Applications/Utils/Tests.cmake
+++ b/Applications/Utils/Tests.cmake
@@ -484,13 +484,12 @@ if(TARGET VerticalSliceFromLayers AND GMSH)
 
 endif()
 
-
 if(TARGET GMSH2OGS AND SNAKEMAKE AND NOT OGS_USE_MPI)
     add_test(NAME snakemake_GMSH2OGS_ExtractBoundary
         COMMAND ${SNAKEMAKE} --cores all
         --configfile ${PROJECT_BINARY_DIR}/buildinfo.yaml
         -s ${CMAKE_CURRENT_SOURCE_DIR}/GMSH2OGS_ExtractBoundary.smk
-        )
+    )
     add_dependencies(ctest GMSH2OGS)
 endif()
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6172d66c6ac31d065651ae38c65b927724ec0baf..eef1d1417227bbf8fa7754977521c3384ce25251 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,18 +49,12 @@ if(NOT WIN32 AND OGS_BUILD_SWMM)
 endif()
 
 # Third-party libraries, names come from Conan package names
-set(OGS_LIBS
-    vtk
-    qt
-    petsc
-    tfel
-    CACHE INTERNAL "")
-foreach(LIB ${OGS_LIBS})
-    set(OGS_LIB_${LIB}
+foreach(lib vtk qt petsc tfel)
+    set(OGS_LIB_${lib}
         "Default"
         CACHE STRING "Which ${LIB} library should be used?")
-    set_property(CACHE OGS_LIB_${LIB} PROPERTY STRINGS "Default" "System")
-endforeach(LIB)
+    set_property(CACHE OGS_LIB_${lib} PROPERTY STRINGS "Default" "System")
+endforeach()
 
 if(OGS_USE_PETSC)
     set(OGS_USE_MPI ON CACHE BOOL "Use MPI" FORCE)
@@ -84,7 +78,7 @@ include(CCacheSetup)
 include(CLCacheSetup)
 include(DocumentationSetup)
 include(test/Test)
-if(OGS_COVERAGE AND NOT IS_SUBPROJECT)
+if(OGS_COVERAGE AND NOT _IS_SUBPROJECT)
     include(Coverage)
 endif()
 include(CppCheck)
@@ -168,10 +162,10 @@ option(OGS_ENABLE_ELEMENT_CUBOID
 option(OGS_ENABLE_ELEMENT_PRISM "Build FEM elements for prisms." ON)
 option(OGS_ENABLE_ELEMENT_PYRAMID "Build FEM elements for pyramids." ON)
 if(NOT OGS_MAX_ELEMENT_DIM MATCHES "^[0-3]$")
-  message(FATAL_ERROR "OGS_MAX_ELEMENT_DIM must be an integer between 0 and 3.")
+    message(FATAL_ERROR "OGS_MAX_ELEMENT_DIM must be an integer between 0 and 3.")
 endif()
 if(NOT OGS_MAX_ELEMENT_ORDER MATCHES "^[0-9]$")
-  message(FATAL_ERROR "OGS_MAX_ELEMENT_ORDER must be an integer.")
+    message(FATAL_ERROR "OGS_MAX_ELEMENT_ORDER must be an integer.")
 endif()
 
 option(OGS_CHECK_HEADER_COMPILATION "Check header for standalone compilation."
@@ -240,7 +234,7 @@ if(OGS_BUILD_CLI OR OGS_BUILD_UTILS OR OGS_BUILD_TESTING)
     add_subdirectory(MaterialLib)
     add_subdirectory(ProcessLib)
 endif()
-if(OGS_BUILD_TESTING AND NOT IS_SUBPROJECT)
+if(OGS_BUILD_TESTING AND NOT _IS_SUBPROJECT)
     add_subdirectory(Tests)
 endif()
 
diff --git a/Documentation/README.txt.in b/Documentation/README.txt.in
index 51e7b59760ccb63a3d86e3ed1b3a7cb19d72395a..839ff9383f013b0b688213867e2e98e289b58f3e 100644
--- a/Documentation/README.txt.in
+++ b/Documentation/README.txt.in
@@ -3,4 +3,4 @@ OGS binary package usage
 
 Start the appropriate executable in the *bin*-folder.
 
-@README_PLATFORM_INSTRUCTIONS@
+@_README_PLATFORM_INSTRUCTIONS@
diff --git a/ProcessLib/CMakeLists.txt b/ProcessLib/CMakeLists.txt
index 2c074e6ec8edf860b74623f57d358b23420b1640..dd6f72d8d937cfff42c2cc7d7426bed9a491f634 100644
--- a/ProcessLib/CMakeLists.txt
+++ b/ProcessLib/CMakeLists.txt
@@ -1,7 +1,7 @@
 # Collect the process libraries in interface library
 add_library(Processes INTERFACE)
 
-foreach(process ${ProcessesList})
+foreach(process ${_processes_list})
     if(OGS_BUILD_PROCESS_${process})
         add_subdirectory(${process})
         target_link_libraries(Processes INTERFACE ${process})
@@ -22,7 +22,8 @@ if(OGS_USE_PYTHON)
     add_subdirectory(SourceTerms/Python)
 endif()
 
-target_link_libraries(ProcessLib
+target_link_libraries(
+    ProcessLib
     PUBLIC
         BaseLib
         MaterialLib
@@ -34,24 +35,20 @@ target_link_libraries(ProcessLib
         $<$<TARGET_EXISTS:ProcessLibBoundaryConditionPython>:ProcessLibBoundaryConditionPython>
         $<$<TARGET_EXISTS:ProcessLibSourceTermPython>:ProcessLibSourceTermPython>
         nlohmann_json
-    PRIVATE
-        ParameterLib
-        GitInfoLib
-        spdlog::spdlog
-        $<$<TARGET_EXISTS:InSituLib>:InSituLib>
+    PRIVATE ParameterLib GitInfoLib spdlog::spdlog
+            $<$<TARGET_EXISTS:InSituLib>:InSituLib>
 )
 
-target_compile_definitions(ProcessLib
-    PUBLIC
-    $<$<BOOL:${OGS_USE_PETSC}>:USE_PETSC>
-    $<$<BOOL:${OGS_USE_XDMF}>:OGS_USE_XDMF>
-    # Enabled elements
-    OGS_MAX_ELEMENT_DIM=${OGS_MAX_ELEMENT_DIM}
-    OGS_MAX_ELEMENT_ORDER=${OGS_MAX_ELEMENT_ORDER}
-    $<$<BOOL:${OGS_ENABLE_ELEMENT_SIMPLEX}>:OGS_ENABLE_ELEMENT_SIMPLEX>
-    $<$<BOOL:${OGS_ENABLE_ELEMENT_CUBOID}>:OGS_ENABLE_ELEMENT_CUBOID>
-    $<$<BOOL:${OGS_ENABLE_ELEMENT_PRISM}>:OGS_ENABLE_ELEMENT_PRISM>
-    $<$<BOOL:${OGS_ENABLE_ELEMENT_PYRAMID}>:OGS_ENABLE_ELEMENT_PYRAMID>
-    PRIVATE
-    $<$<BOOL:${USE_INSITU}>:USE_INSITU>
+target_compile_definitions(
+    ProcessLib
+    PUBLIC $<$<BOOL:${OGS_USE_PETSC}>:USE_PETSC>
+           $<$<BOOL:${OGS_USE_XDMF}>:OGS_USE_XDMF>
+           # Enabled elements
+           OGS_MAX_ELEMENT_DIM=${OGS_MAX_ELEMENT_DIM}
+           OGS_MAX_ELEMENT_ORDER=${OGS_MAX_ELEMENT_ORDER}
+           $<$<BOOL:${OGS_ENABLE_ELEMENT_SIMPLEX}>:OGS_ENABLE_ELEMENT_SIMPLEX>
+           $<$<BOOL:${OGS_ENABLE_ELEMENT_CUBOID}>:OGS_ENABLE_ELEMENT_CUBOID>
+           $<$<BOOL:${OGS_ENABLE_ELEMENT_PRISM}>:OGS_ENABLE_ELEMENT_PRISM>
+           $<$<BOOL:${OGS_ENABLE_ELEMENT_PYRAMID}>:OGS_ENABLE_ELEMENT_PYRAMID>
+    PRIVATE $<$<BOOL:${USE_INSITU}>:USE_INSITU>
 )
diff --git a/ProcessLib/ComponentTransport/Tests.cmake b/ProcessLib/ComponentTransport/Tests.cmake
index 4b67ec1bd8beec830a69ae1799274931bb6a762c..feea80778882345875c347e0f23154a6c76e283d 100644
--- a/ProcessLib/ComponentTransport/Tests.cmake
+++ b/ProcessLib/ComponentTransport/Tests.cmake
@@ -883,7 +883,6 @@ AddTest(
     VIS out_ogs5_H_ts_1_t_10000000.000000.vtu
 )
 
-
 AddTest(
     NAME 1D_ComponentTransport_VariableDependentBoundary
     PATH Parabolic/ComponentTransport/VariableNeumannBoundary
diff --git a/ProcessLib/HT/Tests.cmake b/ProcessLib/HT/Tests.cmake
index a1d14b54c0bd34699672065bc685ec72df349e1c..7f37d9d44094378f76dbd4c53a3ec65f250f2ebd 100644
--- a/ProcessLib/HT/Tests.cmake
+++ b/ProcessLib/HT/Tests.cmake
@@ -60,7 +60,6 @@ AddTest(
     VIS IsothermalFluidFlow_ts_1_t_1.000000.vtu
 )
 
-
 AddTest(
     NAME HT_SimpleSynthetics_PressureParabolicTemperatureParabolic
     PATH Parabolic/HT/SimpleSynthetics
@@ -276,7 +275,6 @@ AddTest(
     VIS IsothermalFluidFlowWithGravityStaggered_ts_1_t_1.000000.vtu
 )
 
-
 AddTest(
     NAME HT_SimpleSynthetics_PressureParabolicTemperatureParabolicStaggered
     PATH Parabolic/HT/SimpleSynthetics
diff --git a/ProcessLib/HeatTransportBHE/Tests.cmake b/ProcessLib/HeatTransportBHE/Tests.cmake
index c8a760ecfa5cba62a6add650af67a226102a8a98..1014e8a7cab11029c70662e7d211c7ea6e71d9ac 100644
--- a/ProcessLib/HeatTransportBHE/Tests.cmake
+++ b/ProcessLib/HeatTransportBHE/Tests.cmake
@@ -1,7 +1,6 @@
 AddTest(
     NAME HeatTransportBHE_1U_3D_beier_sandbox
     PATH Parabolic/T/3D_Beier_sandbox
-    RUNTIME 15
     EXECUTABLE ogs
     EXECUTABLE_ARGS beier_sandbox.prj
     WRAPPER time
diff --git a/ProcessLib/LiquidFlow/Tests.cmake b/ProcessLib/LiquidFlow/Tests.cmake
index a354ea7ce8abe1b39183f040f24e9e5e8bbdf733..9f3da7165b60d70828248473a83f25c4d9db27d9 100644
--- a/ProcessLib/LiquidFlow/Tests.cmake
+++ b/ProcessLib/LiquidFlow/Tests.cmake
@@ -27,7 +27,6 @@ if (NOT OGS_USE_MPI)
     OgsTest(PROJECTFILE Parabolic/LiquidFlow/DrainageExcavation/drainage_LiquidFlow.prj)
 endif()
 
-
 AddTest(
     NAME LiquidFlow_GravityDriven
     PATH Parabolic/LiquidFlow/GravityDriven
diff --git a/ProcessLib/PhaseField/Tests.cmake b/ProcessLib/PhaseField/Tests.cmake
index 8b8da10be41ddf38dc844725e58f81ab38a5c4c6..9e259c5fe2719c2e90655826641a44d6b67b1df3 100644
--- a/ProcessLib/PhaseField/Tests.cmake
+++ b/ProcessLib/PhaseField/Tests.cmake
@@ -8,9 +8,9 @@ AddTest(
     REQUIREMENTS NOT (OGS_USE_LIS OR OGS_USE_MPI)
     RUNTIME 9
     DIFF_DATA
-    expected_2D_StaticCrack_ts_1_t_1.000000.vtu 2D_StaticCrack_ts_1_t_1.000000.vtu displacement displacement 1e-15 0
-    expected_2D_StaticCrack_ts_1_t_1.000000.vtu 2D_StaticCrack_ts_1_t_1.000000.vtu phasefield phasefield 5e-15 0
-   )
+        expected_2D_StaticCrack_ts_1_t_1.000000.vtu 2D_StaticCrack_ts_1_t_1.000000.vtu displacement displacement 1e-15 0
+        expected_2D_StaticCrack_ts_1_t_1.000000.vtu 2D_StaticCrack_ts_1_t_1.000000.vtu phasefield phasefield 5e-15 0
+)
 
 AddTest(
     NAME PhaseField_3D_beam
@@ -22,6 +22,6 @@ AddTest(
     REQUIREMENTS NOT (OGS_USE_LIS OR OGS_USE_MPI)
     RUNTIME 18
     DIFF_DATA
-    expected_beam3_stag1pcsAT2_ts_10_t_1.000000.vtu beam3_stag1pcsAT2_ts_10_t_1.000000.vtu displacement displacement 1e-5 0
-    expected_beam3_stag1pcsAT2_ts_10_t_1.000000.vtu beam3_stag1pcsAT2_ts_10_t_1.000000.vtu phasefield phasefield 1e-6 0
-   )
+        expected_beam3_stag1pcsAT2_ts_10_t_1.000000.vtu beam3_stag1pcsAT2_ts_10_t_1.000000.vtu displacement displacement 1e-5 0
+        expected_beam3_stag1pcsAT2_ts_10_t_1.000000.vtu beam3_stag1pcsAT2_ts_10_t_1.000000.vtu phasefield phasefield 1e-6 0
+)
diff --git a/ProcessLib/RichardsMechanics/Tests.cmake b/ProcessLib/RichardsMechanics/Tests.cmake
index 71cfbb056d52ff7acdcd77ed66da9543b86ac542..9d9e36b35a44530669515a0c6c553905159d4080 100644
--- a/ProcessLib/RichardsMechanics/Tests.cmake
+++ b/ProcessLib/RichardsMechanics/Tests.cmake
@@ -23,8 +23,6 @@ if (NOT OGS_USE_MPI)
     OgsTest(PROJECTFILE RichardsMechanics/LiakopoulosHM/liakopoulos_QN.prj RUNTIME 50)
 endif()
 
-
-
 AddTest(
     NAME RichardsMechanics_square_1e2_confined_compression_restart
     PATH RichardsMechanics
diff --git a/ProcessLib/SteadyStateDiffusion/Tests.cmake b/ProcessLib/SteadyStateDiffusion/Tests.cmake
index 432ada4b9c42c7144bac4a509db33265230fcf93..9cfdb137274455908e81b4912c714a53ece1ba59 100644
--- a/ProcessLib/SteadyStateDiffusion/Tests.cmake
+++ b/ProcessLib/SteadyStateDiffusion/Tests.cmake
@@ -169,9 +169,9 @@ foreach(mesh_size 1e1)
         DIFF_DATA
         line_1_line_${mesh_size}.vtu line_${mesh_size}_neumann_ts_1_t_1.000000.vtu D1_left_N1_right pressure 1e-14 1e-14
     )
-if (NOT OGS_USE_MPI)
-    OgsTest(PROJECTFILE Elliptic/cube_1x1x1_SteadyStateDiffusion/drainage_excavation.prj)
-endif()
+    if (NOT OGS_USE_MPI)
+        OgsTest(PROJECTFILE Elliptic/cube_1x1x1_SteadyStateDiffusion/drainage_excavation.prj)
+    endif()
     AddTest(
         NAME SteadyStateDiffusion_line_1_Robin_Right_Picard_${mesh_size}
         PATH Elliptic/line_1_SteadyStateDiffusion
diff --git a/ProcessLib/ThermoHydroMechanics/Tests.cmake b/ProcessLib/ThermoHydroMechanics/Tests.cmake
index 721b410f725b396c6d267b0a2f1a64f03a1d94f2..18599290679c08041d37fae0620e269913ef2693 100644
--- a/ProcessLib/ThermoHydroMechanics/Tests.cmake
+++ b/ProcessLib/ThermoHydroMechanics/Tests.cmake
@@ -205,7 +205,7 @@ AddTest(
     NAME ThermoHydroMechanics_thermo_osmosis_filtration_effects_CylindricalCavity
     PATH ThermoHydroMechanics/Linear/CylindricalCavity
     RUNTIME 600
-	EXECUTABLE ogs
+    EXECUTABLE ogs
     EXECUTABLE_ARGS CylindricalCavity.prj
     WRAPPER time
     TESTER vtkdiff
diff --git a/ProcessLib/ThermoMechanicalPhaseField/Tests.cmake b/ProcessLib/ThermoMechanicalPhaseField/Tests.cmake
index 8d566da1750e105d325a0fa46c4ce1c128b591b9..a8953cf916b0912ae1781ec42f005f30517815cc 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/Tests.cmake
+++ b/ProcessLib/ThermoMechanicalPhaseField/Tests.cmake
@@ -11,7 +11,7 @@ AddTest(
     expected_cube_1e0_tm_pcs_2_ts_1_t_100.000000.vtu cube_1e0_tm_ts_1_t_100.000000.vtu temperature temperature 1e-6 1e-6
     analytical_cube_1e0_tm_pcs_2_ts_1_t_100.000000.vtu cube_1e0_tm_ts_1_t_100.000000.vtu phasefield phasefield 1e-5 1e-5
     mechanical_cube_1e0_pcs_1_ts_1_t_100.000000.vtu cube_1e0_tm_ts_1_t_100.000000.vtu phasefield phasefield 1e-5 1e-5
-   )
+)
 
 AddTest(
     NAME ThermoMechanicalPhaseField_3D_beam
@@ -26,7 +26,7 @@ AddTest(
     expected_beam3d_pcs_2_ts_1_t_10.000000.vtu beam3d_ts_1_t_10.000000.vtu displacement displacement 1e-5 0
     expected_beam3d_pcs_2_ts_1_t_10.000000.vtu beam3d_ts_1_t_10.000000.vtu phasefield phasefield 1e-6 0
     expected_beam3d_pcs_2_ts_1_t_10.000000.vtu beam3d_ts_1_t_10.000000.vtu temperature temperature 1e-6 0
-   )
+)
 
 AddTest(
     NAME ThermoMechanicalPhaseField_TES_IGLU
@@ -40,7 +40,7 @@ AddTest(
     DIFF_DATA
     expected_tes_hx3_pcs_2_ts_1_t_20.000000.vtu tes_hx3_ts_1_t_20.000000.vtu phasefield phasefield 1e-6 0
     expected_tes_hx3_pcs_2_ts_1_t_20.000000.vtu tes_hx3_ts_1_t_20.000000.vtu heat_flux heat_flux 1e-4 0
-   )
+)
 
 AddTest(
     NAME ThermoMechanicalPhaseField_THERMAL_SHOCK
@@ -53,4 +53,4 @@ AddTest(
     REQUIREMENTS NOT (OGS_USE_LIS OR OGS_USE_MPI)
     DIFF_DATA
     expected_slab_5_pcs_2_ts_1_t_1.000000.vtu slab_5_ts_1_t_1.000000.vtu phasefield phasefield 1e-6 0
-   )
+)
diff --git a/ProcessLib/ThermoMechanics/Tests.cmake b/ProcessLib/ThermoMechanics/Tests.cmake
index 3dc844d40f6b4acf43a5c5f2c0e87a994d7a9cd9..14909bd0372864a14f73b2eec8d7b666028a53db 100644
--- a/ProcessLib/ThermoMechanics/Tests.cmake
+++ b/ProcessLib/ThermoMechanics/Tests.cmake
@@ -139,7 +139,6 @@ AddTest(
     WRAPPER time
     TESTER vtkdiff
     REQUIREMENTS NOT (OGS_USE_LIS OR OGS_USE_MPI)
-    RUNTIME 17
     DIFF_DATA
     tm1_3Dsquare_ts_1_t_1.000000.vtu tm1_3Dsquare_ts_1_t_1.000000.vtu temperature temperature 1e-11 0.0
     tm1_3Dsquare_ts_1_t_1.000000.vtu tm1_3Dsquare_ts_1_t_1.000000.vtu displacement displacement 1e-10 0.0
diff --git a/ProcessLib/ThermoRichardsMechanics/Tests.cmake b/ProcessLib/ThermoRichardsMechanics/Tests.cmake
index 047644a79640bd6cf27e9f405ea24b27325056c7..cffba2350a8fb751e487e60e6c3f2b7ad3daa525 100644
--- a/ProcessLib/ThermoRichardsMechanics/Tests.cmake
+++ b/ProcessLib/ThermoRichardsMechanics/Tests.cmake
@@ -42,7 +42,6 @@ AddTest(
     expected_cube_1e3_tm_ts_17_t_72000.000000.vtu cube_1e3_tm_ts_17_t_72000.000000.vtu epsilon epsilon 1e-16 0
 )
 
-
 AddTest(
     NAME ThermoRichardsMechanics_HeatTransportInStationaryFlow
     PATH ThermoRichardsMechanics/HeatTransportInStationaryFlow
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 5dc0d9b76b4d0e7cb886ec9ce4ef76591831996d..7dc25988a37f49b87dd816629382a8682108e3e5 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -99,7 +99,7 @@ endif()
 
 # cmake-format: off
 # Add make-target tests which runs the testrunner
-if(IS_CI AND NOT OGS_COVERAGE)
+if(DEFINED ENV{CI} AND NOT OGS_COVERAGE)
     set(OGS_CI_TESTRUNNER_REPEAT 3 CACHE STRING
         "The number of testrunner repeats for the tests target")
     set(TESTRUNNER_ADDITIONAL_ARGUMENTS ${TESTRUNNER_ADDITIONAL_ARGUMENTS}
diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake
index 0d13896d8577a16d73c726d986a8ee0566ffdd4d..e84f88e1fc463e56b6a344245319443ac2529e7e 100644
--- a/scripts/cmake/CMakeSetup.cmake
+++ b/scripts/cmake/CMakeSetup.cmake
@@ -1,9 +1,9 @@
 # Disallow in-source builds as the git project cluttered with generated files
 # probably confuses people. source/build* is still allowed!
 if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
-   message(FATAL_ERROR "In-source builds are not allowed!\n"
-    "Make sure to remove CMakeCache.txt and CMakeFiles/ "
-    "from the source directory!")
+    message(FATAL_ERROR "In-source builds are not allowed!\n"
+        "Make sure to remove CMakeCache.txt and CMakeFiles/ "
+        "from the source directory!")
 endif()
 
 # Set additional CMake modules path
@@ -33,7 +33,7 @@ set(NUM_PROCESSORS ${NUM_PROCESSORS} CACHE STRING "Processor count")
 
 # Check if this project is included in another
 if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
-    set(IS_SUBPROJECT ON CACHE INTERNAL "" FORCE)
+    set(_IS_SUBPROJECT ON CACHE INTERNAL "" FORCE)
     set(OGS_BUILD_CLI OFF CACHE BOOL "" FORCE)
 endif()
 
@@ -48,11 +48,6 @@ endif()
 # Get the hostname
 site_name(HOSTNAME)
 
-# Check if we are running under CI
-if(DEFINED ENV{JENKINS_URL} OR DEFINED ENV{CI})
-    set(IS_CI ON CACHE INTERNAL "")
-endif()
-
 if(BUILD_SHARED_LIBS)
     # When static libraries are used in some shared libraries it is required
     # that also the static libraries have position independent code.
diff --git a/scripts/cmake/CheckHeaderCompilation.cmake b/scripts/cmake/CheckHeaderCompilation.cmake
index addb233a92cddf6f3f2a35e41b8ffa764fbfc76e..b02df131ac3b57734aaff0c3a839beb7f3637c11 100644
--- a/scripts/cmake/CheckHeaderCompilation.cmake
+++ b/scripts/cmake/CheckHeaderCompilation.cmake
@@ -13,35 +13,35 @@ add_custom_target(check-header
 )
 
 # Checks header for standalone compilation
-function(_check_header_compilation TARGET)
-
-    if(NOT TARGET ${TARGET})
+function(_check_header_compilation target)
+    # cmake-lint: disable=R0915
+    if(NOT TARGET ${target})
         return()
     endif()
 
-    get_target_property(SOURCE_FILES ${TARGET} SOURCES)
-    get_target_property(SOURCE_DIR ${TARGET} SOURCE_DIR)
+    get_target_property(SOURCE_FILES ${target} SOURCES)
+    get_target_property(SOURCE_DIR ${target} SOURCE_DIR)
 
     get_directory_property(DEFS DIRECTORY ${SOURCE_DIR} COMPILE_DEFINITIONS)
-    foreach(DEF ${DEFS})
-        if(${DEF} MATCHES ".*[0-9]\\(.*")
+    foreach(def ${DEFS})
+        if(${def} MATCHES ".*[0-9]\\(.*")
             continue()
         endif()
-        list(APPEND DEFS_CLEANED "-D${DEF}")
+        list(APPEND DEFS_CLEANED "-D${def}")
     endforeach()
 
-    get_target_property(INCLUDE_DIRS ${TARGET} INCLUDE_DIRECTORIES)
-    get_target_property(LINK_LIBS ${TARGET} LINK_LIBRARIES)
-    foreach(LIB ${LINK_LIBS})
+    get_target_property(INCLUDE_DIRS ${target} INCLUDE_DIRECTORIES)
+    get_target_property(LINK_LIBS ${target} LINK_LIBRARIES)
+    foreach(lib ${LINK_LIBS})
         # Ignore non-existing targets or interface libs
-        if(NOT TARGET ${LIB})
+        if(NOT TARGET ${lib})
             continue()
         endif()
-        get_target_property(LIB_TYPE ${LIB} TYPE)
+        get_target_property(LIB_TYPE ${lib} TYPE)
         if(LIB_TYPE STREQUAL "INTERFACE_LIBRARY")
             continue()
         endif()
-        get_target_property(TARGET_INCLUDE_DIRS ${LIB} INCLUDE_DIRECTORIES)
+        get_target_property(TARGET_INCLUDE_DIRS ${lib} INCLUDE_DIRECTORIES)
         if(TARGET_INCLUDE_DIRS)
             list(APPEND INCLUDE_DIRS ${TARGET_INCLUDE_DIRS})
         endif()
@@ -52,6 +52,7 @@ function(_check_header_compilation TARGET)
     message(STATUS "Checking header compilation for ${DIRECTORY} ...")
     include(CheckCXXSourceCompiles)
 
+    # cmake-lint: disable=C0103
     set(CMAKE_REQUIRED_INCLUDES ${INCLUDE_DIRS} ${SOURCE_DIR})
     # HACK, maybe add Gui Widgets Xml XmlPatterns as well
     if(OGS_BUILD_GUI)
@@ -63,38 +64,38 @@ function(_check_header_compilation TARGET)
     endif()
     set(CMAKE_REQUIRED_DEFINITIONS ${DEFS_CLEANED})
 
-    foreach(FILE ${SOURCE_FILES})
+    foreach(file ${SOURCE_FILES})
 
-        if(NOT "${FILE}" MATCHES ".*\\.h") # Check only header files
+        if(NOT "${file}" MATCHES ".*\\.h") # Check only header files
             continue()
         endif()
-        if("${FILE}" MATCHES ".*-impl\\.h") # Ignore *-impl.h files
+        if("${file}" MATCHES ".*-impl\\.h") # Ignore *-impl.h files
             continue()
         endif()
-        if("${FILE}" MATCHES ".*Dialog\\.h") # Ignore Qt Dialog files
+        if("${file}" MATCHES ".*Dialog\\.h") # Ignore Qt Dialog files
             continue()
         endif()
-        if("${FILE}" MATCHES ".*Widget\\.h") # Ignore Qt Widget files
+        if("${file}" MATCHES ".*Widget\\.h") # Ignore Qt Widget files
             continue()
         endif()
-        if("${FILE}" MATCHES ".*Window\\.h") # Ignore Qt Window files
+        if("${file}" MATCHES ".*Window\\.h") # Ignore Qt Window files
             continue()
         endif()
 
-        string(REPLACE "${PROJECT_SOURCE_DIR}/" "" TEST_NAME ${FILE})
+        string(REPLACE "${PROJECT_SOURCE_DIR}/" "" TEST_NAME ${file})
         string(REPLACE "." "_" TEST_NAME ${TEST_NAME})
         string(REPLACE "/" "_" TEST_NAME ${TEST_NAME})
         check_cxx_source_compiles(
             "
-            #include \"${FILE}\"
+            #include \"${file}\"
             int main() { return 0; }
             "
             ${TEST_NAME}_COMPILES
         )
 
         if(NOT ${TEST_NAME}_COMPILES)
-            set(HEADER_COMPILE_ERROR TRUE CACHE INTERNAL "")
-            message(STATUS "  Compilation failed for ${FILE}")
+            set(_HEADER_COMPILE_ERROR TRUE CACHE INTERNAL "")
+            message(STATUS "  Compilation failed for ${file}")
         endif()
         unset(${TEST_NAME}_COMPILES CACHE)
 
@@ -102,11 +103,12 @@ function(_check_header_compilation TARGET)
     endforeach()
 endfunction()
 
+# Check header compilation in
 function(check_header_compilation)
     if(NOT OGS_CHECK_HEADER_COMPILATION)
         return()
     endif()
-    set(HEADER_COMPILE_ERROR FALSE CACHE INTERNAL "")
+    set(_HEADER_COMPILE_ERROR FALSE CACHE INTERNAL "")
 
     _check_header_compilation(BaseLib)
     _check_header_compilation(ChemistryLib)
@@ -132,7 +134,7 @@ function(check_header_compilation)
         _check_header_compilation(VtkVis)
     endif()
 
-    if(HEADER_COMPILE_ERROR)
+    if(_HEADER_COMPILE_ERROR)
         message(FATAL_ERROR "... header compilation check failed, see CMakeFiles/CMakeError.log for details!")
     endif()
 endfunction()
diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake
index 4a207fdc4a4ebe8da9635a73f307bdd8d3a8dabb..b9ded4b27f5839749287b013e1e3a27400ddbdd8 100644
--- a/scripts/cmake/CompilerSetup.cmake
+++ b/scripts/cmake/CompilerSetup.cmake
@@ -9,16 +9,16 @@ endif()
 
 # Set compiler helper variables
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "AppleClang")
-    set(COMPILER_IS_APPLE_CLANG TRUE CACHE INTERNAL "")
-    set(COMPILER_IS_CLANG TRUE CACHE INTERNAL "")
+    set(COMPILER_IS_APPLE_CLANG TRUE CACHE BOOL "")
+    set(COMPILER_IS_CLANG TRUE CACHE BOOL "")
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
-    set(COMPILER_IS_CLANG TRUE CACHE INTERNAL "")
+    set(COMPILER_IS_CLANG TRUE CACHE BOOL "")
 elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
-    set(COMPILER_IS_GCC TRUE CACHE INTERNAL "")
+    set(COMPILER_IS_GCC TRUE CACHE BOOL "")
 elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
-    set(COMPILER_IS_INTEL TRUE CACHE INTERNAL "")
+    set(COMPILER_IS_INTEL TRUE CACHE BOOL "")
 elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
-    set(COMPILER_IS_MSVC TRUE CACHE INTERNAL "")
+    set(COMPILER_IS_MSVC TRUE CACHE BOOL "")
 endif() # CMAKE_CXX_COMPILER_ID
 
 ### GNU-like compiler
diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index 9b97ed7b29c59472ae1b453100839deb2a69dd94..42839e8c22f5abc4590fa8b448a7983a49cbf9de 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -3,7 +3,7 @@ if(NOT OGS_USE_CONAN)
 endif()
 string(TOLOWER ${OGS_USE_CONAN} OGS_USE_CONAN_lower)
 if(OGS_USE_CONAN_lower STREQUAL "auto" AND POETRY)
-    execute_process(COMMAND ${CMD_COMMAND} poetry add conan==${ogs.minimum_version.conan}
+    execute_process(COMMAND ${_CMD_COMMAND} poetry add conan==${ogs.minimum_version.conan}
         WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
     find_program(CONAN_CMD conan HINTS ${LOCAL_VIRTUALENV_BIN_DIRS}
         REQUIRED NO_DEFAULT_PATH
@@ -129,7 +129,7 @@ file(TIMESTAMP ${PROJECT_BINARY_DIR}/conan_install_timestamp.txt file_timestamp
 string(TIMESTAMP timestamp "%Y.%m.%d")
 
 # Run conan install update only once a day
-if("${file_timestamp}" VERSION_LESS ${timestamp} OR IS_CI)
+if("${file_timestamp}" VERSION_LESS ${timestamp} OR DEFINED ENV{CI})
     file(WRITE ${PROJECT_BINARY_DIR}/conan_install_timestamp.txt "${timestamp}\n")
     set(CONAN_UPDATE UPDATE)
     set(CONAN_COMMAND ${CONAN_CMD} CACHE INTERNAL "") # Speed up conan_add_remote
diff --git a/scripts/cmake/Coverage.cmake b/scripts/cmake/Coverage.cmake
index d68a40edb730cf1f38a57525321e6a2449a0580c..f09fad76632930f434429337a5b72e2295faa6e7 100644
--- a/scripts/cmake/Coverage.cmake
+++ b/scripts/cmake/Coverage.cmake
@@ -8,7 +8,7 @@ append_coverage_compiler_flags()
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
 
 if(NOT FASTCOV_PATH)
-    execute_process(COMMAND ${CMD_COMMAND} poetry add fastcov==1.10
+    execute_process(COMMAND ${_CMD_COMMAND} poetry add fastcov==1.10
         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
     )
     find_program(FASTCOV_PATH NAMES fastcov
diff --git a/scripts/cmake/Dependencies.cmake b/scripts/cmake/Dependencies.cmake
index e92aa3f81e7d2571dac6d07701b822e3f1bc027f..5e716af3dabb549f3fb1ea97201cb2d9aa642e9e 100644
--- a/scripts/cmake/Dependencies.cmake
+++ b/scripts/cmake/Dependencies.cmake
@@ -302,8 +302,8 @@ if(OGS_USE_CVODE)
 endif()
 
 # Disable warnings
-foreach(TARGET ${DISABLE_WARNINGS_TARGETS})
-    target_compile_options(${TARGET} PRIVATE
+foreach(target ${DISABLE_WARNINGS_TARGETS})
+    target_compile_options(${target} PRIVATE
         $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:-w>
         $<$<CXX_COMPILER_ID:MSVC>:/W0>)
 endforeach()
@@ -318,14 +318,14 @@ find_program(CMAKE_FORMAT_PROGRAM cmake-format)
 
 if(CLANG_FORMAT_PROGRAM OR CMAKE_FORMAT_PROGRAM)
     if(NOT CMAKE_FORMAT_PROGRAM)
-        set(skip_cmake "FORMAT_SKIP_CMAKE YES")
+        set(_skip_cmake "FORMAT_SKIP_CMAKE YES")
     endif()
     CPMAddPackage(
       NAME Format.cmake
       VERSION 1.7.0
       GITHUB_REPOSITORY TheLartians/Format.cmake
       OPTIONS
-        ${skip_cmake}
+        ${_skip_cmake}
         "CMAKE_FORMAT_EXCLUDE scripts/cmake/CPM.cmake|.*/Tests.cmake|scripts/cmake/jedbrown/.*|scripts/cmake/conan/conan.cmake|scripts/cmake/vector-of-bool/.*"
     )
 endif()
diff --git a/scripts/cmake/DocumentationProjectFile.cmake b/scripts/cmake/DocumentationProjectFile.cmake
index d88ef307306fce34189d268e62c3817d82a47568..787074a7d69a4309ab66dba5fc9958d702eac1f6 100644
--- a/scripts/cmake/DocumentationProjectFile.cmake
+++ b/scripts/cmake/DocumentationProjectFile.cmake
@@ -3,8 +3,9 @@ cmake_policy(SET CMP0009 NEW)
 # Moves an *.md file from the src directory to DocAux directory in the build
 # tree augmenting it with basic extra information, such as the list of child
 # pages and the page title.
-function(documentationProjectFilePutIntoPlace p)
-    file(RELATIVE_PATH relative_path ${DocumentationProjectFileInputDir} ${p})
+function(documentationProjectFilePutIntoPlace dir)
+    # cmake-lint: disable=R0912,R0915
+    file(RELATIVE_PATH relative_path ${DOCUMENTATION_PROJECTFILE_INPUTDIR} ${dir})
     get_filename_component(dir_name ${relative_path} DIRECTORY)
 
     get_filename_component(otagname ${relative_path} NAME_WE)
@@ -12,13 +13,13 @@ function(documentationProjectFilePutIntoPlace p)
         # if the file name starts with an underscore, then this files is
         # the "table of contents of the current directory
 
-        file(MAKE_DIRECTORY "${DocumentationProjectFileBuildDir}/${dir_name}")
+        file(MAKE_DIRECTORY "${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${dir_name}")
 
         set(postfix "# Child parameters, attributes and cases\n\n")
 
         # gather other parameter files
         # the loop below will effects a page hierarchy to be built
-        file(GLOB param_files ${DocumentationProjectFileInputDir}/${dir_name}/*)
+        file(GLOB param_files ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/${dir_name}/*)
         set(subpagelist "")
         foreach(pf ${param_files})
             # ignore hidden files
@@ -110,31 +111,30 @@ function(documentationProjectFilePutIntoPlace p)
     endif()
 
     # read, augment, write file content
-    file(READ ${p} content)
+    file(READ ${dir} content)
     set(content "/*! \\page ${pagenameprefix}${tagpath} ${pagetitle}\n${content}\n\n${postfix}\n")
     if (NOT doc_use_external_tools)
         set(ending "\n*/\n")
     else()
         set(ending "") # external tools shall finish the file
     endif()
-    string(REGEX REPLACE .md$ .dox output_file "${DocumentationProjectFileBuildDir}/${relative_path}")
+    string(REGEX REPLACE .md$ .dox output_file "${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${relative_path}")
     file(WRITE "${output_file}" "${content}${ending}")
 endfunction()
 
-
-set(DocumentationProjectFileBuildDir ${PROJECT_BINARY_DIR}/DocAux/dox/ProjectFile)
-set(DocumentationProjectFileInputDir ${PROJECT_SOURCE_DIR}/Documentation/ProjectFile)
+set(DOCUMENTATION_PROJECTFILE_BUILDDIR ${PROJECT_BINARY_DIR}/DocAux/dox/ProjectFile)
+set(DOCUMENTATION_PROJECTFILE_INPUTDIR ${PROJECT_SOURCE_DIR}/Documentation/ProjectFile)
 
 # remove old output
-if (IS_DIRECTORY ${DocumentationProjectFileBuildDir})
-    file(REMOVE_RECURSE ${DocumentationProjectFileBuildDir})
+if (IS_DIRECTORY ${DOCUMENTATION_PROJECTFILE_BUILDDIR})
+    file(REMOVE_RECURSE ${DOCUMENTATION_PROJECTFILE_BUILDDIR})
 endif()
 
 # traverse input file hierarchy
 file(GLOB_RECURSE input_paths FOLLOW_SYMLINKS
-    ${DocumentationProjectFileInputDir}/c_* ${DocumentationProjectFileInputDir}/i_*)
+    ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/c_* ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/i_*)
 
-foreach(p ${input_paths})
-    message("directory index file ${p}")
-    documentationProjectFilePutIntoPlace(${p})
+foreach(path ${input_paths})
+    message("directory index file ${path}")
+    documentationProjectFilePutIntoPlace(${path})
 endforeach()
diff --git a/scripts/cmake/DocumentationSetup.cmake b/scripts/cmake/DocumentationSetup.cmake
index 4cf26ae0df7aff30274f45677eef763866621866..cc8eb16c325f6cdcd4b3667addabf6eee5592cc0 100644
--- a/scripts/cmake/DocumentationSetup.cmake
+++ b/scripts/cmake/DocumentationSetup.cmake
@@ -77,9 +77,9 @@ doxygen_add_docs(doc
     ${PROJECT_BINARY_DIR}/DocAux/dox)
 
 if (BASH_TOOL_PATH AND Python3_EXECUTABLE)
-    set(doc_use_external_tools TRUE)
+    set(_doc_use_external_tools TRUE)
 else()
-    set(doc_use_external_tools FALSE)
+    set(_doc_use_external_tools FALSE)
 endif()
 # TODO that will always transform all of the input files no matter if they changed
 # maybe this behaviour can be changed to on-demand processing
@@ -87,20 +87,19 @@ add_custom_target(internal_pre_doc
     ${CMAKE_COMMAND}
     -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}
     -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
-    -Ddoc_use_external_tools=${doc_use_external_tools}
+    -Ddoc_use_external_tools=${_doc_use_external_tools}
     -P ${PROJECT_SOURCE_DIR}/scripts/cmake/DocumentationProjectFile.cmake
     WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
     COMMENT "Generating project file documentation hierarchy." VERBATIM)
 add_dependencies(doc internal_pre_doc)
 
-if (doc_use_external_tools)
-    set(data_dir "${Data_SOURCE_DIR}")
+if (_doc_use_external_tools)
     add_custom_target(internal_pre_doc_qa_page
         ${BASH_TOOL_PATH}
         "${PROJECT_SOURCE_DIR}/scripts/doc/generate-project-file-doc-qa.sh"
         ${PROJECT_SOURCE_DIR}
         ${PROJECT_BINARY_DIR}
-        ${data_dir}
+        "${Data_SOURCE_DIR}"
         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
         COMMENT "Generating project file documentation quality assurance pages." VERBATIM)
     add_dependencies(doc internal_pre_doc_qa_page)
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 1a2e1f2ba0a2bbfafbbd5368285c1a6306bf70d8..fad0363838c0f60cd333b41830a1f233682c900a 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -89,6 +89,7 @@ if(OGS_USE_MFRONT)
         add_definitions(-DHAVE_PTHREADS)
     endif()
     if(OGS_USE_CONAN)
+        # cmake-lint: disable=C0103
         set(TFELHOME ${CONAN_TFEL_ROOT} CACHE INTERNAL "")
     endif()
 endif()
diff --git a/scripts/cmake/Functions.cmake b/scripts/cmake/Functions.cmake
index d2bd612b2250af213b6506fd2c4116fa344d2021..019e9c6d46cf3c2239a6e89099b53cc7aa208fb9 100644
--- a/scripts/cmake/Functions.cmake
+++ b/scripts/cmake/Functions.cmake
@@ -1,12 +1,12 @@
 # Returns the current subdirectory in the sources directory.
-macro(GET_CURRENT_SOURCE_SUBDIRECTORY CURRENT_SOURCE_SUBDIRECTORY)
+macro(GET_CURRENT_SOURCE_SUBDIRECTORY current_source_subdirectory)
     string(REGEX REPLACE ".*/([^/]*)" "\\1" REGEX_RESULT "${CMAKE_CURRENT_SOURCE_DIR}" )
-    set(${CURRENT_SOURCE_SUBDIRECTORY} ${REGEX_RESULT})
+    set(${current_source_subdirectory} ${REGEX_RESULT})
 endmacro()
 
-# Returns a list of source files (*.h and *.cpp) in SOURCE_FILES and creates a Visual
+# Returns a list of source files (*.h and *.cpp) in source_files and creates a Visual
 # Studio folder. A (relative) subdirectory can be passed as second parameter (optional).
-macro(GET_SOURCE_FILES SOURCE_FILES)
+macro(GET_SOURCE_FILES source_files)
     if(${ARGC} EQUAL 2)
         set(DIR "${ARGV1}")
     else()
@@ -18,8 +18,8 @@ macro(GET_SOURCE_FILES SOURCE_FILES)
     file(GLOB GET_SOURCE_FILES_TEMPLATES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${DIR}/*.tpp)
     file(GLOB GET_SOURCE_FILES_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${DIR}/*.cpp)
 
-    set(${SOURCE_FILES} ${GET_SOURCE_FILES_HEADERS} ${GET_SOURCE_FILES_TEMPLATES} ${GET_SOURCE_FILES_SOURCES})
-    list(LENGTH ${SOURCE_FILES} NUM_FILES)
+    set(${source_files} ${GET_SOURCE_FILES_HEADERS} ${GET_SOURCE_FILES_TEMPLATES} ${GET_SOURCE_FILES_SOURCES})
+    list(LENGTH ${source_files} NUM_FILES)
     if(${NUM_FILES} EQUAL 0)
         message(FATAL_ERROR "No source files found in ${DIR}")
     endif()
@@ -40,9 +40,9 @@ macro(GET_SOURCE_FILES SOURCE_FILES)
 
 endmacro()
 
-# Appends a list of source files (*.h and *.cpp) to SOURCE_FILES and creates a Visual
+# Appends a list of source files (*.h and *.cpp) to source_files and creates a Visual
 # Studio folder. A (relative) subdirectory can be passed as second parameter (optional).
-macro(APPEND_SOURCE_FILES SOURCE_FILES)
+macro(APPEND_SOURCE_FILES source_files)
     if(${ARGC} EQUAL 2)
         set(DIR "${ARGV1}")
     else()
@@ -50,7 +50,7 @@ macro(APPEND_SOURCE_FILES SOURCE_FILES)
     endif()
 
     GET_SOURCE_FILES(TMP_SOURCES "${DIR}")
-    set(${SOURCE_FILES} ${${SOURCE_FILES}} ${TMP_SOURCES})
+    set(${source_files} ${${source_files}} ${TMP_SOURCES})
 endmacro()
 
 # Creates one ctest for each googletest found in source files passed as arguments
@@ -79,6 +79,7 @@ function(add_autogen_include target)
     endif()
 endfunction()
 
+# Replacement for add_library() for ogs targets
 function(ogs_add_library targetName)
     add_library(${targetName} ${ARGN})
     target_compile_options(${targetName} PRIVATE
@@ -104,6 +105,7 @@ function(ogs_add_library targetName)
     endif()
 endfunction()
 
+# Parses current directory into a list
 function(current_dir_as_list baseDir outList)
     file(RELATIVE_PATH REL_DIR ${PROJECT_SOURCE_DIR}/${baseDir} ${CMAKE_CURRENT_LIST_DIR})
     string(REPLACE "/" ";" DIR_LIST ${REL_DIR})
diff --git a/scripts/cmake/GitSetup.cmake b/scripts/cmake/GitSetup.cmake
index 5616b091461754c4d78bc3497ffc4964134944c6..8d1cf3f5e036ec5d6b3eb31b14f0610f569d12ef 100644
--- a/scripts/cmake/GitSetup.cmake
+++ b/scripts/cmake/GitSetup.cmake
@@ -1,6 +1,7 @@
 ### Git detection ###
 find_package(Git REQUIRED)
 
+# cmake-lint: disable=W0106
 if(DEFINED ENV{OGS_VERSION})
     set(OGS_VERSION $ENV{OGS_VERSION})
     message(STATUS "OGS VERSION: ${OGS_VERSION} (set via environment)")
@@ -8,13 +9,13 @@ elseif(DEFINED OGS_VERSION)
     message(STATUS "Using user-provided OGS_VERSION=${OGS_VERSION}")
 endif()
 
-if(NOT IS_GIT_REPO)
+if(NOT _IS_GIT_REPO)
     execute_process(COMMAND ${GIT_EXECUTABLE} status
         WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
-        RESULT_VARIABLE IS_GIT_REPO
+        RESULT_VARIABLE _IS_GIT_REPO
         OUTPUT_QUIET)
-    if(IS_GIT_REPO GREATER 0)
-        set(IS_GIT_REPO FALSE CACHE INTERNAL "")
+    if(_IS_GIT_REPO GREATER 0)
+        set(_IS_GIT_REPO FALSE CACHE INTERNAL "")
         if(DEFINED OGS_VERSION)
             message(WARNING "Using user-provided OGS_VERSION; Submodule setup is skipped!")
         else()
@@ -24,11 +25,11 @@ if(NOT IS_GIT_REPO)
                 " OR manually set the OGS_VERSION variable.")
         endif()
     else()
-        set(IS_GIT_REPO TRUE CACHE INTERNAL "")
+        set(_IS_GIT_REPO TRUE CACHE INTERNAL "")
     endif()
 endif()
 
-if(IS_GIT_REPO)
+if(_IS_GIT_REPO)
     if(DEFINED ENV{CI_COMMIT_BRANCH})
         set(OGS_GIT_BRANCH $ENV{CI_COMMIT_BRANCH})
     else()
@@ -41,7 +42,7 @@ if(IS_GIT_REPO)
     endif()
 endif()
 
-if(IS_GIT_REPO AND NOT OGS_VERSION)
+if(_IS_GIT_REPO AND NOT OGS_VERSION)
     # Get version info from Git, implementation based on
     # https://github.com/tomtom-international/cpp-dependencies
     execute_process(
@@ -53,33 +54,33 @@ if(IS_GIT_REPO AND NOT OGS_VERSION)
     if(DESCRIBE_RESULT EQUAL 0)
         string(STRIP "${DESCRIBE_STDOUT}" DESCRIBE_STDOUT)
         if(DESCRIBE_STDOUT MATCHES "^(.*)-(dirty)$")
-          set(DESCRIBE_DIRTY "${CMAKE_MATCH_2}")
-          set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}")
+            set(DESCRIBE_DIRTY "${CMAKE_MATCH_2}")
+            set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}")
         endif()
         if(DESCRIBE_STDOUT MATCHES "^([0-9a-f]+)$")
-          set(DESCRIBE_COMMIT_NAME "${CMAKE_MATCH_1}")
-          set(DESCRIBE_STDOUT "")
+            set(DESCRIBE_COMMIT_NAME "${CMAKE_MATCH_1}")
+            set(DESCRIBE_STDOUT "")
         elseif(DESCRIBE_STDOUT MATCHES "^(.*)-g([0-9a-f]+)$")
-          set(DESCRIBE_COMMIT_NAME "g${CMAKE_MATCH_2}")
-          set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}")
+            set(DESCRIBE_COMMIT_NAME "g${CMAKE_MATCH_2}")
+            set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}")
         endif()
         if(DESCRIBE_STDOUT MATCHES "^(.*)-([0-9]+)$")
-          set(DESCRIBE_COMMIT_COUNT "${CMAKE_MATCH_2}")
-          set(DESCRIBE_TAG "${CMAKE_MATCH_1}")
-          set(DESCRIBE_STDOUT "")
+            set(DESCRIBE_COMMIT_COUNT "${CMAKE_MATCH_2}")
+            set(DESCRIBE_TAG "${CMAKE_MATCH_1}")
+            set(DESCRIBE_STDOUT "")
         endif()
 
         set(OGS_VERSION ${DESCRIBE_TAG})
         if(DESCRIBE_COMMIT_COUNT GREATER 0)
-          set(OGS_VERSION "${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}")
+            set(OGS_VERSION "${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}")
         endif()
 
         if(DESCRIBE_DIRTY)
-          set(OGS_VERSION "${OGS_VERSION}.dirty")
-          if(DEFINED ENV{CI})
-            string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC)
-            set(OGS_VERSION "${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}")
-          endif()
+            set(OGS_VERSION "${OGS_VERSION}.dirty")
+            if(DEFINED ENV{CI})
+                string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC)
+                set(OGS_VERSION "${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}")
+            endif()
         endif()
         message(STATUS "OGS VERSION: ${OGS_VERSION} (reported by git)")
     else()
@@ -103,5 +104,5 @@ if(IS_GIT_REPO AND NOT OGS_VERSION)
 endif()
 
 if(MSVC)
-    set(CMD_COMMAND "cmd" "/c" CACHE INTERNAL "")
+    set(_CMD_COMMAND "cmd" "/c" CACHE INTERNAL "")
 endif()
diff --git a/scripts/cmake/MetisSetup.cmake b/scripts/cmake/MetisSetup.cmake
index 13ff2047ea704f5701fb491aebf5d3f1564278f8..47a1ee837bfa911773674d5cebc471009615230c 100644
--- a/scripts/cmake/MetisSetup.cmake
+++ b/scripts/cmake/MetisSetup.cmake
@@ -6,9 +6,9 @@ add_definitions(-DUSE_GKREGEX)
 set(GKLIB_PATH "${METIS_PATH}/GKlib" CACHE PATH "path to GKlib")
 
 if(SHARED)
-	set(METIS_LIBRARY_TYPE SHARED)
+    set(METIS_LIBRARY_TYPE SHARED)
 else()
-	set(METIS_LIBRARY_TYPE STATIC)
+    set(METIS_LIBRARY_TYPE STATIC)
 endif(SHARED)
 
 include(${GKLIB_PATH}/GKlibSystem.cmake)
@@ -31,10 +31,10 @@ if(BUILD_SHARED_LIBS)
 endif()
 
 if(UNIX)
-  target_link_libraries(ogs_metis m)
+    target_link_libraries(ogs_metis m)
 elseif(MSVC)
-  include(GenerateExportHeader)
-  generate_export_header(ogs_metis)
+    include(GenerateExportHeader)
+    generate_export_header(ogs_metis)
 endif()
 
 ## Compile mpmetis
@@ -43,11 +43,11 @@ add_definitions(-DSVNINFO="")
 include_directories(${METIS_PATH}/libmetis)
 include_directories(${METIS_PATH}/programs)
 set(METIS_SOURCES
-   ${METIS_PATH}/programs/mpmetis.c
-   ${METIS_PATH}/programs/cmdline_mpmetis.c
-   ${METIS_PATH}/programs/io.c
-   ${METIS_PATH}/programs/stat.c
-   )
+    ${METIS_PATH}/programs/mpmetis.c
+    ${METIS_PATH}/programs/cmdline_mpmetis.c
+    ${METIS_PATH}/programs/io.c
+    ${METIS_PATH}/programs/stat.c
+)
 add_executable(mpmetis ${METIS_SOURCES})
 target_link_libraries(mpmetis ogs_metis)
 install(TARGETS mpmetis RUNTIME DESTINATION bin)
diff --git a/scripts/cmake/ParseCMakeArgs.cmake b/scripts/cmake/ParseCMakeArgs.cmake
index 023145a57173b91c62e3326c3f2b299dee6dbbbf..c0df8647d1a19cc32d47c96bb68753a80bfa23a8 100644
--- a/scripts/cmake/ParseCMakeArgs.cmake
+++ b/scripts/cmake/ParseCMakeArgs.cmake
@@ -20,20 +20,20 @@ if(EXISTS ${PROJECT_BINARY_DIR}/CMakeCache.txt)
 endif()
 
 get_cmake_property(CACHE_VARS CACHE_VARIABLES)
-foreach(CACHE_VAR ${CACHE_VARS})
-  get_property(CACHE_VAR_HELPSTRING CACHE ${CACHE_VAR} PROPERTY HELPSTRING)
-  if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
-    get_property(CACHE_VAR_TYPE CACHE ${CACHE_VAR} PROPERTY TYPE)
-    if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
-      set(CACHE_VAR_TYPE)
-    else()
-      set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
+foreach(cache_var ${CACHE_VARS})
+    get_property(CACHE_VAR_HELPSTRING CACHE ${cache_var} PROPERTY HELPSTRING)
+    if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
+        get_property(CACHE_VAR_TYPE CACHE ${cache_var} PROPERTY TYPE)
+        if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
+            set(CACHE_VAR_TYPE)
+        else()
+            set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
+        endif()
+        set(CMAKE_ARGS "${CMAKE_ARGS} -D${cache_var}${CACHE_VAR_TYPE}=\"${${cache_var}}\"")
     endif()
-    set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")
-  endif()
 endforeach()
 
-set(CMAKE_ARGS "${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=\"${CMAKE_BUILD_TYPE}\"" CACHE INTERNAL "")
+set(CMAKE_ARGS "${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=\"${CMAKE_BUILD_TYPE}\"" CACHE STRING "")
 string(REPLACE "\"" "\\\"" CMAKE_ARGS_ESCAPED ${CMAKE_ARGS})
-set(CMAKE_ARGS_ESCAPED "${CMAKE_ARGS_ESCAPED}" CACHE INTERNAL "")
+set(CMAKE_ARGS_ESCAPED "${CMAKE_ARGS_ESCAPED}" CACHE STRING "")
 file(WRITE ${PROJECT_BINARY_DIR}/cmake-args "${CMAKE_ARGS}\n")
diff --git a/scripts/cmake/ProcessesSetup.cmake b/scripts/cmake/ProcessesSetup.cmake
index 86d103a33017ba99de836db58b6c2120ae842492..f12185f7314d21cc4f104b5e63664f8da69d9b4c 100644
--- a/scripts/cmake/ProcessesSetup.cmake
+++ b/scripts/cmake/ProcessesSetup.cmake
@@ -1,6 +1,6 @@
 # A list of processes to be build. Also used in the ProcessLib to select
 # processes to be build.
-set(ProcessesList
+set(_processes_list
     ComponentTransport
     HT
     HeatConduction
@@ -25,7 +25,7 @@ set(ProcessesList
     TwoPhaseFlowWithPrho)
 
 # Add a cmake option for each process.
-foreach(process ${ProcessesList})
+foreach(process ${_processes_list})
     option(OGS_BUILD_PROCESS_${process} "Build the ${process} process." ON)
 endforeach()
 
@@ -33,7 +33,7 @@ set(OGS_BUILD_PROCESSES
     ""
     CACHE STRING "Semicolon-separated list of processes to build")
 if(NOT OGS_BUILD_CLI)
-    set(OGS_BUILD_PROCESSES OFF "" CACHE INTERNAL "")
+    set(OGS_BUILD_PROCESSES OFF "" CACHE STRING "" FORCE)
     message(STATUS "ATTENTION: OGS_BUILD_CLI=OFF -> OGS_BUILD_PROCESSES is set to OFF too.\n"
         "   If cli is switched on again, remember to switch processes back to on \n"
         "   too with -DOGS_BUILD_PROCESSES=\"\"!")
@@ -41,19 +41,19 @@ endif()
 if(NOT "${OGS_BUILD_PROCESSES}" STREQUAL "")
     if(${OGS_BUILD_PROCESSES})
         foreach(process ${OGS_BUILD_PROCESSES})
-            if(NOT "${process}" IN_LIST ProcessesList)
+            if(NOT "${process}" IN_LIST processes_list)
                 message(
                     FATAL_ERROR
                         "${process} given in OGS_BUILD_PROCESSES is "
-                        "not a valid process name! Valid names are ${ProcessesList}"
-                    )
+                        "not a valid process name! Valid names are ${processes_list}"
+                )
             endif()
         endforeach()
         message(STATUS "Enabled processes:")
     else()
         message(STATUS "All processes disabled.")
     endif()
-    foreach(process ${ProcessesList})
+    foreach(process ${processes_list})
         if("${process}" IN_LIST OGS_BUILD_PROCESSES)
             set(OGS_BUILD_PROCESS_${process} ON CACHE BOOL "" FORCE)
             message(STATUS "  ${process}")
diff --git a/scripts/cmake/ProjectSetup.cmake b/scripts/cmake/ProjectSetup.cmake
index b45f501574c1a5cc342c34fcf2cf0627a67f87b1..49e93cae39c6164113f282cb5531af038679ed4a 100644
--- a/scripts/cmake/ProjectSetup.cmake
+++ b/scripts/cmake/ProjectSetup.cmake
@@ -3,14 +3,15 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
 if(OGS_USE_CONAN AND MSVC)
-    foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
-        string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
-        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-    endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
+    foreach(outputconfig ${CMAKE_CONFIGURATION_TYPES})
+        string(TOUPPER ${outputconfig} outputconfig)
+        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${outputconfig} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${outputconfig} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${outputconfig} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+    endforeach()
 endif()
 
+# cmake-lint: disable=C0103
 set(Data_SOURCE_DIR ${PROJECT_SOURCE_DIR}/Tests/Data CACHE INTERNAL "")
 set(Data_BINARY_DIR ${PROJECT_BINARY_DIR}/Tests/Data CACHE INTERNAL "")
 
@@ -21,13 +22,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 # RPATH setup
 if(APPLE)
-    set(basePoint @loader_path)
+    set(BASEPOINT @loader_path)
 else()
-    set(basePoint $ORIGIN)
+    set(BASEPOINT $ORIGIN)
 endif()
 file(RELATIVE_PATH relDir
     ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
     ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
 )
-set(CMAKE_INSTALL_RPATH ${basePoint} ${basePoint}/${relDir})
+set(CMAKE_INSTALL_RPATH ${BASEPOINT} ${BASEPOINT}/${relDir})
 set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
diff --git a/scripts/cmake/PythonSetup.cmake b/scripts/cmake/PythonSetup.cmake
index 499baf4d51ab4f82b40a0df0d174c6db161f426d..acf68936c54ea73d4d0c10a58bff74c72e176c22 100644
--- a/scripts/cmake/PythonSetup.cmake
+++ b/scripts/cmake/PythonSetup.cmake
@@ -1,3 +1,4 @@
+# cmake-lint: disable=C0103
 if(OGS_USE_POETRY)
     find_program(POETRY poetry)
     if(POETRY)
@@ -8,7 +9,7 @@ if(OGS_USE_POETRY)
                 ${PROJECT_BINARY_DIR}/pyproject.toml)
         endif()
         if(NOT EXISTS ${PROJECT_BINARY_DIR}/.venv)
-            execute_process(COMMAND ${CMD_COMMAND} poetry install
+            execute_process(COMMAND ${_CMD_COMMAND} poetry install
                 WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
         endif()
         set(Python3_ROOT_DIR ${PROJECT_BINARY_DIR}/.venv)
@@ -46,6 +47,6 @@ if(POETRY)
     if(OGS_BUILD_TESTING)
         list(APPEND PYTHON_PACKAGES snakemake=${ogs.minimum_version.snakemake})
     endif()
-    execute_process(COMMAND ${CMD_COMMAND} poetry add ${PYTHON_PACKAGES}
+    execute_process(COMMAND ${_CMD_COMMAND} poetry add ${PYTHON_PACKAGES}
         WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
 endif()
diff --git a/scripts/cmake/packaging/Pack.cmake b/scripts/cmake/packaging/Pack.cmake
index 729350aef06d6cf6292d14705d7f08560bda4f34..b9d4a04659e476cfac94e73b153f029af4d9928d 100644
--- a/scripts/cmake/packaging/Pack.cmake
+++ b/scripts/cmake/packaging/Pack.cmake
@@ -1,4 +1,4 @@
-if(IS_SUBPROJECT)
+if(_IS_SUBPROJECT)
     include (CPack)
     return()
 endif()
@@ -76,7 +76,6 @@ if(OGS_USE_PYTHON)
     endif()
 endif()
 
-
 configure_file(Documentation/README.txt.in ${PROJECT_BINARY_DIR}/README.txt)
 install(FILES ${PROJECT_BINARY_DIR}/README.txt DESTINATION .)
 
diff --git a/scripts/cmake/packaging/PackagingLinux.cmake b/scripts/cmake/packaging/PackagingLinux.cmake
index c4434906174b6d5d84352e2c9f1d5bea420dade1..d5c4ecf17d4780e7b3de9956c7148bcae3928347 100644
--- a/scripts/cmake/packaging/PackagingLinux.cmake
+++ b/scripts/cmake/packaging/PackagingLinux.cmake
@@ -26,7 +26,7 @@ else()
     endif()
 endif()
 
-set(README_PLATFORM_INSTRUCTIONS
+set(_README_PLATFORM_INSTRUCTIONS
     "When running the Data Explorer make sure to set the LD_LIBRARY_PATH path to the bin-folder. E.g.: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./ ./DataExplorer"
     CACHE INTERNAL ""
 )
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index 3535241b2496aa68fb10974f054d9189e0e27d12..acadcc8834afb4ca654be545233d08fbddce2527 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -50,7 +50,7 @@
 #         Can be given multiple times; the point coordinates in the gml files are
 #         compared using the given absolute and relative tolerances.
 # ~~~
-
+# cmake-lint: disable=C0103,R0911,R0912,R0915
 function (AddTest)
 
     # parse arguments
@@ -59,7 +59,6 @@ function (AddTest)
     set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS PYTHON_PACKAGES VIS)
     cmake_parse_arguments(AddTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
-
     set(AddTest_SOURCE_PATH "${Data_SOURCE_DIR}/${AddTest_PATH}")
     set(AddTest_BINARY_PATH "${Data_BINARY_DIR}/${AddTest_PATH}")
     file(MAKE_DIRECTORY ${AddTest_BINARY_PATH})
diff --git a/scripts/cmake/test/AddTestTester.cmake b/scripts/cmake/test/AddTestTester.cmake
index 7b9ff26d2f0b5ae70a8a67eb2614e37e477c2990..595dd3fffa8d55bd55662927700f51f8e1def6f3 100644
--- a/scripts/cmake/test/AddTestTester.cmake
+++ b/scripts/cmake/test/AddTestTester.cmake
@@ -1,9 +1,9 @@
 # Run vtk.js converter
 if(VIS_FILES AND VTKJS_CONVERTER)
     execute_process(COMMAND cmake -E make_directory ${VTKJS_OUTPUT_PATH})
-    foreach(FILE ${VIS_FILES})
+    foreach(file ${VIS_FILES})
         execute_process(
-            COMMAND ${VTKJS_CONVERTER} -e -i ${BINARY_PATH}/${FILE} -o ${VTKJS_OUTPUT_PATH}
+            COMMAND ${VTKJS_CONVERTER} -e -i ${BINARY_PATH}/${file} -o ${VTKJS_OUTPUT_PATH}
         )
     endforeach()
 endif()
@@ -16,30 +16,31 @@ else()
     set(TERMINAL_CMD bash -c)
 endif()
 set(TEST_FAILED FALSE)
-foreach(CMD ${TESTER_COMMAND})
+foreach(cmd ${TESTER_COMMAND})
     if(GLOB_MODE)
-        separate_arguments(CMD)
-        list(GET CMD 0 GLOB)
-        list(GET CMD 1 NAME_A)
-        list(GET CMD 2 NAME_B)
-        list(GET CMD 3 ABS_TOL)
-        list(GET CMD 4 REL_TOL)
+        # cmake-lint: disable=E1120
+        separate_arguments(cmd)
+        list(GET cmd 0 GLOB)
+        list(GET cmd 1 NAME_A)
+        list(GET cmd 2 NAME_B)
+        list(GET cmd 3 ABS_TOL)
+        list(GET cmd 4 REL_TOL)
         file(GLOB FILES RELATIVE ${SOURCE_PATH} ${GLOB})
-        list(LENGTH FILES length)
-        message(STATUS "Glob expression '${GLOB}' (${NAME_A}) found ${length} files.")
-        if(${length} EQUAL 0)
+        list(LENGTH FILES LENGTH)
+        message(STATUS "Glob expression '${GLOB}' (${NAME_A}) found ${LENGTH} files.")
+        if(${LENGTH} EQUAL 0)
             message(FATAL_ERROR "DIFF_DATA glob expression '${GLOB}' "
                 "did not match any files!")
         endif()
-        foreach(FILE ${FILES})
+        foreach(file ${FILES})
             if("$ENV{HOSTNAME}" MATCHES "frontend.*")
-                string(REPLACE "gpfs1" "../.." FILE ${FILE})
+                string(REPLACE "gpfs1" "../.." file ${file})
             endif()
             if("$ENV{HOSTNAME}" MATCHES "frontend.*")
-                string(REPLACE "gpfs0" "../.." FILE ${FILE})
+                string(REPLACE "gpfs0" "../.." file ${file})
             endif()
             execute_process(
-                COMMAND ${SELECTED_DIFF_TOOL_PATH} ${SOURCE_PATH}/${FILE} ${BINARY_PATH}/${FILE} -a ${NAME_A} -b ${NAME_B} --abs ${ABS_TOL} --rel ${REL_TOL}
+                COMMAND ${SELECTED_DIFF_TOOL_PATH} ${SOURCE_PATH}/${file} ${BINARY_PATH}/${file} -a ${NAME_A} -b ${NAME_B} --abs ${ABS_TOL} --rel ${REL_TOL}
                 WORKING_DIRECTORY ${SOURCE_PATH}
                 RESULT_VARIABLE EXIT_CODE
                 OUTPUT_VARIABLE OUTPUT
@@ -53,7 +54,7 @@ foreach(CMD ${TESTER_COMMAND})
         endforeach()
     else()
         execute_process(
-            COMMAND ${TERMINAL_CMD} "${CMD}"
+            COMMAND ${TERMINAL_CMD} "${cmd}"
             WORKING_DIRECTORY ${SOURCE_PATH}
             RESULT_VARIABLE EXIT_CODE
             OUTPUT_VARIABLE OUTPUT
diff --git a/scripts/cmake/test/AddTestWrapper.cmake b/scripts/cmake/test/AddTestWrapper.cmake
index c8d801d698c2ea770827073aa027dd341ba8c3a0..3d06833ab07aab48c00582e5ee4179150901b34e 100644
--- a/scripts/cmake/test/AddTestWrapper.cmake
+++ b/scripts/cmake/test/AddTestWrapper.cmake
@@ -1,7 +1,7 @@
 # IMPORTANT: multiple arguments in one variables have to be in list notation (;)
 # and have to be quoted when passed "-DEXECUTABLE_ARGS=${AddTest_EXECUTABLE_ARGS}"
-foreach(FILE ${FILES_TO_DELETE})
-    file(REMOVE ${BINARY_PATH}/${FILE})
+foreach(file ${FILES_TO_DELETE})
+    file(REMOVE ${BINARY_PATH}/${file})
 endforeach()
 
 string(REPLACE ";" " " CMD_STRING "cd ${WORKING_DIRECTORY} && ${WRAPPER_COMMAND} "
diff --git a/scripts/cmake/test/CTestCustom.in.cmake b/scripts/cmake/test/CTestCustom.in.cmake
index 5f401e4561a71f0e996822fd06b5e7a490fd3a63..5f0056f42614b1bfb05c0cab31dc7eca26212516 100644
--- a/scripts/cmake/test/CTestCustom.in.cmake
+++ b/scripts/cmake/test/CTestCustom.in.cmake
@@ -4,9 +4,9 @@ file (STRINGS "@PROJECT_BINARY_DIR@/CTestTestfile.cmake" LINES)
 file(WRITE "@PROJECT_BINARY_DIR@/CTestTestfile.cmake" "")
 
 # loop through the lines,
-foreach(LINE IN LISTS LINES)
-  # remove unwanted parts
-  string(REGEX REPLACE ".*_deps/.*" "" STRIPPED "${LINE}")
-  # and write the (changed) line ...
-  file(APPEND "@PROJECT_BINARY_DIR@/CTestTestfile.cmake" "${STRIPPED}\n")
+foreach(line IN LISTS LINES)
+    # remove unwanted parts
+    string(REGEX REPLACE ".*_deps/.*" "" STRIPPED "${line}")
+    # and write the (changed) line ...
+    file(APPEND "@PROJECT_BINARY_DIR@/CTestTestfile.cmake" "${STRIPPED}\n")
 endforeach()
diff --git a/scripts/cmake/test/MeshTest.cmake b/scripts/cmake/test/MeshTest.cmake
index d18380cd78ab4ad9474d3975b16ef9efcdb2c1a1..080919847bec6b5e4e3ce0cc6359364b30da1280 100644
--- a/scripts/cmake/test/MeshTest.cmake
+++ b/scripts/cmake/test/MeshTest.cmake
@@ -17,7 +17,7 @@
 #                          values should be taken from envinf1 serial job
 # )
 # ~~~
-
+# cmake-lint: disable=C0103,R0912,R0915
 function (MeshTest)
     if(NOT OGS_BUILD_TESTING)
         return()
@@ -28,7 +28,6 @@ function (MeshTest)
     set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS)
     cmake_parse_arguments(MeshTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
-
     set(MeshTest_SOURCE_PATH "${Data_SOURCE_DIR}/${MeshTest_PATH}")
     set(MeshTest_BINARY_PATH "${Data_BINARY_DIR}/${MeshTest_PATH}")
     file(MAKE_DIRECTORY ${MeshTest_BINARY_PATH})
diff --git a/scripts/cmake/test/MoveDataToStore.cmake b/scripts/cmake/test/MoveDataToStore.cmake
deleted file mode 100644
index 84d22d2f02f4ab4d172aee5395f46a2ff4525079..0000000000000000000000000000000000000000
--- a/scripts/cmake/test/MoveDataToStore.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# Get all files matching .ExternalData_<algo>_<hash>
-file(GLOB_RECURSE FILES "" ${ExternalData_SOURCE_ROOT}/.ExternalData_${ExternalData_LINK_CONTENT}_*)
-foreach(HASH_FILE ${FILES})
-    string(REGEX MATCH [^_]+$ HASH ${HASH_FILE})
-    message("Copying ${HASH_FILE} to ${ExternalData_OBJECT_STORES}/${HASH}")
-    file(RENAME ${HASH_FILE} ${ExternalData_OBJECT_STORES}/${ExternalData_LINK_CONTENT}/${HASH})
-endforeach()
diff --git a/scripts/cmake/test/OgsTest.cmake b/scripts/cmake/test/OgsTest.cmake
index efc854e1698513fc2e880d1a7b1802946ff85c13..9b44e38c9b60819b94167af97c1af0e57d7efc02 100644
--- a/scripts/cmake/test/OgsTest.cmake
+++ b/scripts/cmake/test/OgsTest.cmake
@@ -1,3 +1,4 @@
+# cmake-lint: disable=C0103
 function (OgsTest)
 
     if(NOT OGS_BUILD_CLI OR NOT OGS_BUILD_TESTING)