diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90cc25822e52aedeae8b69add032a8e80357651b..4f7df5ebaca28cc1c340846d796161fd2ae69667 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -290,4 +290,4 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BaseLib/BuildInfo.cpp.in"
     "${CMAKE_CURRENT_BINARY_DIR}/BaseLib/BuildInfo.cpp" @ONLY)
 
 include(scripts/cmake/MarkVariablesAdvanced.cmake)
-include(scripts/cmake/packaging/GetDependencies.cmake)
+unset(PRE_INSTALL_RUN CACHE)
diff --git a/scripts/cmake/packaging/GetDependencies.cmake b/scripts/cmake/packaging/GetDependencies.cmake
deleted file mode 100644
index 878ec3874f3081bdbcddd88543e83df4cd8f5dc3..0000000000000000000000000000000000000000
--- a/scripts/cmake/packaging/GetDependencies.cmake
+++ /dev/null
@@ -1,43 +0,0 @@
-foreach(TARGET ${INSTALL_DEPENDENCIES})
-
-    if(MSVC AND NOT CMAKE_GENERATOR STREQUAL "Ninja" )
-        if(USE_CONAN)
-            set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-        else()
-            set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/Release/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-        endif()
-    else()
-        set(TARGET_EXE ${EXECUTABLE_OUTPUT_PATH}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
-    endif()
-
-    if(EXISTS ${TARGET_EXE})
-        include(GetPrerequisites)
-        # arg3: exclude system, arg4: recursive
-        if (VTK_BUILD_SHARED_LIBS)
-            list(APPEND dirs ${vtkIOXML_RUNTIME_LIBRARY_DIRS})
-        endif()
-        list(APPEND dirs "/usr/local/lib")
-        get_prerequisites(${TARGET_EXE} TARGET_DEPENDENCIES 1 1 "" ${dirs})
-        if(PRE_INSTALL_RUN)
-            message("-- Dependencies of target ${TARGET}:")
-        endif()
-        foreach(DEPENDENCY ${TARGET_DEPENDENCIES})
-            if(NOT ${DEPENDENCY} MATCHES "@loader_path")
-                gp_resolve_item("${TARGET_EXE}" "${DEPENDENCY}" "" "" DEPENDENCY_PATH)
-                get_filename_component(RESOLVED_DEPENDENCY_PATH "${DEPENDENCY_PATH}" REALPATH)
-                string(TOLOWER ${DEPENDENCY} DEPENDENCY_LOWER)
-                set(DEPENDENCY_PATHS ${DEPENDENCY_PATHS} ${RESOLVED_DEPENDENCY_PATH})
-                if(PRE_INSTALL_RUN)
-                    message("     ${RESOLVED_DEPENDENCY_PATH}")
-                endif()
-            endif()
-        endforeach()
-        if(PRE_INSTALL_RUN)
-            message("")
-        endif()
-        install(FILES ${DEPENDENCY_PATHS} DESTINATION bin)
-    endif()
-
-endforeach()
-
-unset(PRE_INSTALL_RUN CACHE)
diff --git a/scripts/cmake/packaging/InstallDependencies.cmake b/scripts/cmake/packaging/InstallDependencies.cmake
index 46e94625f7dcd4283fe1e386158326902dd93339..a3076119fb0c4216cc74343969807c757d5ec93a 100644
--- a/scripts/cmake/packaging/InstallDependencies.cmake
+++ b/scripts/cmake/packaging/InstallDependencies.cmake
@@ -1,4 +1,41 @@
-# Registers a target for installing its dependencies (dll / so files)
 macro(InstallDependencies TARGET)
-    set(INSTALL_DEPENDENCIES "${INSTALL_DEPENDENCIES};${TARGET}" CACHE INTERNAL "")
+    set(EXCLUDE_SYSTEM 1)
+    get_target_property(EXE_DIR ${TARGET} RUNTIME_OUTPUT_DIRECTORY)
+    set(TARGET_EXE ${EXE_DIR}/${TARGET}${CMAKE_EXECUTABLE_SUFFIX})
+
+    if(EXISTS ${TARGET_EXE})
+        # Run CMake again after target was built to collect dependencies
+        add_custom_command(TARGET ${TARGET} POST_BUILD
+            COMMAND ${CMAKE_COMMAND} . -DPRE_INSTALL_RUN=ON
+            WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
+        )
+
+        include(GetPrerequisites)
+        # arg3: exclude system, arg4: recursive
+        if (VTK_BUILD_SHARED_LIBS)
+            list(APPEND dirs ${vtkIOXML_RUNTIME_LIBRARY_DIRS})
+        endif()
+        list(APPEND dirs "/usr/local/lib")
+        get_prerequisites(${TARGET_EXE} TARGET_DEPENDENCIES ${EXCLUDE_SYSTEM} 1 "" ${dirs})
+        if(PRE_INSTALL_RUN)
+            message("-- Dependencies of target ${TARGET}:")
+        endif()
+        foreach(DEPENDENCY ${TARGET_DEPENDENCIES})
+            if(NOT ${DEPENDENCY} MATCHES "@loader_path")
+                gp_resolve_item("${TARGET_EXE}" "${DEPENDENCY}" "" "" DEPENDENCY_PATH)
+                get_filename_component(RESOLVED_DEPENDENCY_PATH "${DEPENDENCY_PATH}" REALPATH)
+                string(TOLOWER ${DEPENDENCY} DEPENDENCY_LOWER)
+                set(DEPENDENCY_PATHS ${DEPENDENCY_PATHS} ${RESOLVED_DEPENDENCY_PATH})
+                if(PRE_INSTALL_RUN)
+                    message("     ${RESOLVED_DEPENDENCY_PATH}")
+                endif()
+            endif()
+        endforeach()
+        if(PRE_INSTALL_RUN)
+            message("")
+        endif()
+        install(FILES ${DEPENDENCY_PATHS} DESTINATION bin)
+    endif()
+
 endmacro()
+
diff --git a/scripts/cmake/packaging/package.cmd.in b/scripts/cmake/packaging/package.cmd.in
deleted file mode 100644
index 1fe02f1d9b86c73ad2943ed1f7def8097ef76bdd..0000000000000000000000000000000000000000
--- a/scripts/cmake/packaging/package.cmd.in
+++ /dev/null
@@ -1,3 +0,0 @@
-cmake --build . --config Release
-cmake -DPRE_INSTALL_RUN=ON .
-cmake --build . --target package --config Release
diff --git a/scripts/cmake/packaging/package.sh.in b/scripts/cmake/packaging/package.sh.in
deleted file mode 100644
index cf6690c1f0341511ac939134f1e3014b6cc2ea42..0000000000000000000000000000000000000000
--- a/scripts/cmake/packaging/package.sh.in
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-cmake --build . --config Release -- -j ${NUM_PROCESSORS}
-cmake -DPRE_INSTALL_RUN=ON .
-cmake --build . --target package --config Release