diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9136e61fe9ba266f0ad52c2b5424a76310b5e8f5..ef48ac0dcc0856a7d19595c6b793cb313bb5d934 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,10 +25,17 @@ SOFTWARE.
 
 cmake_minimum_required(VERSION 3.25)
 
-# If CMake >=3.24 is used, set policies up to v3.24 to NEW
-# if (NOT ${CMAKE_VERSION} VERSION_LESS 3.24)
-#     cmake_policy(VERSION 3.24)
-# endif()
+set(CMAKE_MAXIMUM_SUPPORTED_VERSION 3.28)
+
+# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
+# to CMAKE_VERSION to NEW
+if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+    cmake_policy(VERSION ${CMAKE_VERSION})
+# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
+# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
+else ()
+    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+endif()
 
 project(LoadStaticSharedTargets VERSION 1.4.1 LANGUAGES NONE)
 
diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt
index 9f309814ac837fbd04029109fb37dc0826defca4..ba64606ee81b00b56e8bed8a2e4e25c871026390 100644
--- a/packaging/CMakeLists.txt
+++ b/packaging/CMakeLists.txt
@@ -26,8 +26,13 @@ SOFTWARE.
 include(CMakePackageConfigHelpers)
 
 if (NOT DEFINED LoadStaticSharedTargets_INSTALL_CMAKEDIR)
-    set(LoadStaticSharedTargets_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}"
-        CACHE STRING "Path to LoadStaticSharedTargets CMake files")
+    set(
+        LoadStaticSharedTargets_INSTALL_CMAKEDIR
+        "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}"
+        CACHE
+        STRING
+        "Path to LoadStaticSharedTargets CMake files"
+    )
 endif ()
 
 install(
@@ -42,10 +47,16 @@ write_basic_package_version_file(
     COMPATIBILITY SameMajorVersion
 )
 
+configure_file(
+    "LoadStaticSharedTargetsConfig.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfig.cmake"
+    @ONLY
+)
+
 install(
     FILES
     "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfigVersion.cmake"
-    "LoadStaticSharedTargetsConfig.cmake"
+    "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfig.cmake"
     "../src/cmake/LoadStaticSharedTargets.cmake"
     DESTINATION "${LoadStaticSharedTargets_INSTALL_CMAKEDIR}"
 )
diff --git a/packaging/LoadStaticSharedTargetsConfig.cmake b/packaging/LoadStaticSharedTargetsConfig.cmake.in
similarity index 69%
rename from packaging/LoadStaticSharedTargetsConfig.cmake
rename to packaging/LoadStaticSharedTargetsConfig.cmake.in
index 3a59913cdaea8171b5cf8c8041430577eee58615..dd2608401aae2ecb2b0f0443e1f4a54197d36ebe 100644
--- a/packaging/LoadStaticSharedTargetsConfig.cmake
+++ b/packaging/LoadStaticSharedTargetsConfig.cmake.in
@@ -23,12 +23,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 ]]
 
-cmake_minimum_required(VERSION 3.25)
+cmake_minimum_required(VERSION @CMAKE_MINIMUM_REQUIRED_VERSION@)
 
-# If CMake >=3.24 is used, set policies up to v3.24 to NEW
-# if (NOT ${CMAKE_VERSION} VERSION_LESS 3.24)
-#     cmake_policy(VERSION 3.24)
-# endif()
+set(CMAKE_MAXIMUM_SUPPORTED_VERSION @CMAKE_MAXIMUM_SUPPORTED_VERSION@)
+
+# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
+# to CMAKE_VERSION to NEW
+if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+    cmake_policy(VERSION ${CMAKE_VERSION})
+# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
+# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
+else ()
+    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+endif()
 
 # include(LoadStaticSharedTargets) should work after this
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index dee4f65c8b868347c424cb54cd2725af10bd4166..7fb6d78b55dc100e9cd605399ecc8d864a4126a0 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -64,7 +64,12 @@ set(
 foreach (TEST_CASE IN LISTS TEST_CASES TEST_CASES_WITH_WARNING)
     add_test(
         NAME "${TEST_CASE}"
-        COMMAND "${CMAKE_COMMAND}" -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} -D "TEST_CASE=${TEST_CASE}" -P "./helpers/test_case_wrapper.cmake"
+        COMMAND
+        "${CMAKE_COMMAND}"
+        -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION}
+        -D CMAKE_MAXIMUM_SUPPORTED_VERSION=${CMAKE_MAXIMUM_SUPPORTED_VERSION}
+        -D "TEST_CASE=${TEST_CASE}"
+        -P "./helpers/test_case_wrapper.cmake"
         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
     )
 endforeach ()
@@ -72,7 +77,12 @@ endforeach ()
 foreach (TEST_CASE IN LISTS TEST_CASES_WITH_WARNING)
     add_test(
         NAME "${TEST_CASE}_check-warning"
-        COMMAND "${CMAKE_COMMAND}" -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} -D "TEST_CASE=${TEST_CASE}" -P "./helpers/test_case_wrapper.cmake"
+        COMMAND
+        "${CMAKE_COMMAND}"
+        -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION}
+        -D CMAKE_MAXIMUM_SUPPORTED_VERSION=${CMAKE_MAXIMUM_SUPPORTED_VERSION}
+        -D "TEST_CASE=${TEST_CASE}"
+        -P "./helpers/test_case_wrapper.cmake"
         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
     )
 
diff --git a/tests/helpers/test_case_wrapper.cmake b/tests/helpers/test_case_wrapper.cmake
index 744a3e0f56c2d3f6b600eb1409342ff0a9db3531..53c695bbef43f2e309bff189deb4e64827dc15f4 100644
--- a/tests/helpers/test_case_wrapper.cmake
+++ b/tests/helpers/test_case_wrapper.cmake
@@ -25,6 +25,16 @@ SOFTWARE.
 
 cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
 
+# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
+# to CMAKE_VERSION to NEW
+if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+    cmake_policy(VERSION ${CMAKE_VERSION})
+# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
+# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
+else ()
+    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+endif()
+
 include("./helpers/assertions.cmake")
 include("../src/cmake/LoadStaticSharedTargets.cmake")