diff --git a/cmake/Makefile.coverage.in b/cmake/Makefile.coverage.in
deleted file mode 100644
index d4c148c3acac390f3160e73d562ecad591b60b9b..0000000000000000000000000000000000000000
--- a/cmake/Makefile.coverage.in
+++ /dev/null
@@ -1,40 +0,0 @@
-#######################################################################################################################
-#
-# Additional make target for generating a code coverage report.
-#
-# ATTENTION: This file has bee deprecated in project-template and will no longer be maintained.
-# DO NOT MODIFY THIS FILE IN THE PROJECT TEMPLATE!
-# Use make_coverage.sh.in instead!
-#
-#######################################################################################################################
-
-#######################################################################################################################
-#
-# IMPORTANT NOTE:
-#
-# DO NOT MODIFY THIS FILE inside a project. Instead update the project-template repository and pull the change from
-# there. Make sure to keep the file generic, since it will be used by other projects, too.
-#
-# If you have modified this file inside a project despite this warning, make sure to cherry-pick all your changes
-# into the project-template repository immediately.
-#
-#######################################################################################################################
-
-coverage:
-	echo ATTENTION: Using Makefile.coverage.in in your CMake project is deprecated. Please change to make_coverage.sh.in
-	rm -f `find . -name "*\.gcda"`
-	make test
-	lcov --capture --directory . --output-file coverage_all.info
-	#lcov capture also includes external stuff like glibc, boost etc.
-	#only extract the reports for this project
-	lcov --extract coverage_all.info "@CMAKE_SOURCE_DIR@*" -o coverage_incl_build.info
-	#Some projects install the library and its headers for testing in the build directory
-	#and compile tests and examples against it. This leads to double
-	#counting and untested lines in the coverage report. That's why we
-	#exclude the build directory from the coverage report (needed if the
-	#build directory is in the source tree).
-	#Attention: If you make an 'in sorce build' the coverage report will
-	#be empty!
-	lcov --remove coverage_incl_build.info "@PROJECT_BINARY_DIR@/*" -o coverage.info
-	genhtml coverage.info --output-directory coverage_html
-	echo ATTENTION: Using Makefile.coverage.in in your CMake project is deprecated. Please change to make_coverage.sh.in
diff --git a/cmake/enable_code_coverage_report.cmake b/cmake/enable_code_coverage_report.cmake
index f668dd9b08f9e030a45922289d267402e9a02d39..c64bf8467bfc71c94ef6dc2cbe6bbedb5bfdee38 100644
--- a/cmake/enable_code_coverage_report.cmake
+++ b/cmake/enable_code_coverage_report.cmake
@@ -25,16 +25,24 @@
 #
 #######################################################################################################################
 
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 --coverage")
 # The make coverage command is only available in debug mode.  Also
 # factor in that cmake treats CMAKE_BUILD_TYPE string as case
 # insensitive.
+
+option(ENABLE_COVERAGE_REPORT "Create coverage target to generate code coverage reports" ON)
+
 string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_uppercase)
-IF(build_type_uppercase STREQUAL "DEBUG")
+IF(build_type_uppercase STREQUAL "DEBUG" AND ENABLE_COVERAGE_REPORT)
+    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage")
+    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} --coverage")
     configure_file(cmake/make_coverage.sh.in
-    ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY)
+        ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY)
     add_custom_target(coverage
-    ./make_coverage.sh
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-    COMMENT "Generating test coverage documentation" VERBATIM)
+        ./make_coverage.sh
+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+        COMMENT "Generating test coverage documentation" VERBATIM)
+    add_custom_target(clean-gcda
+        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+        COMMAND find -name "*.gcda" -exec rm {} \;
+        COMMENT "Removing old coverage files" VERBATIM)
 ENDIF()
diff --git a/cmake/make_coverage.sh.in b/cmake/make_coverage.sh.in
index 0f3620e438e16070de72a5fbc1436170beea8098..8634e958b8845fec58ac88ab468c44dd2071c2d1 100755
--- a/cmake/make_coverage.sh.in
+++ b/cmake/make_coverage.sh.in
@@ -23,7 +23,7 @@
 #
 #######################################################################################################################
 
-rm -f `find . -name "*\.gcda"`
+cmake --build . --target clean-gcda
 cmake --build . --target test
 lcov --capture --directory . --output-file coverage_all.info --ignore-errors gcov
 
diff --git a/cmake/set_default_flags.cmake b/cmake/set_default_flags.cmake
index 5723e64d1dbb5c34fcc60ac89b774a2746e180ee..068cafa83b8e96679f566c7f28a89fe24b60bc58 100644
--- a/cmake/set_default_flags.cmake
+++ b/cmake/set_default_flags.cmake
@@ -23,25 +23,17 @@
 
 include(cmake/enable_latest_cxx_support.cmake)
 
-option(BUILD_COVERAGE_ON_DEBUG "Generate coverage information when compiling in debug mode" ON)
-
-if (BUILD_COVERAGE_ON_DEBUG)
-    set(CTK_COVERAGE_FLAGS "--coverage")
-else()
-    set(CTK_COVERAGE_FLAGS "")
-endif()
-
 set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;asan;tsan")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${PROJECT_NAME}_CXX_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -g")
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 ${CTK_COVERAGE_FLAGS}")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
 set(CMAKE_CXX_FLAGS_TSAN "${CMAKE_CXX_FLAGS} -g -O1 -fsanitize=thread")
 set(CMAKE_CXX_FLAGS_ASAN "${CMAKE_CXX_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak")
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${PROJECT_NAME}_C_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized")
 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -g")
-set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0 ${CTK_COVERAGE_FLAGS}")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0")
 set(CMAKE_C_FLAGS_TSAN "${CMAKE_C_FLAGS} -g -O1 -fsanitize=thread")
 set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak")