diff --git a/CMakeLists.txt b/CMakeLists.txt
index bcee98a5f1..52a1fd4924 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,6 @@
 # CMake 3.2 required for cmake to know the right flags for CXX standard on OSX
 cmake_minimum_required(VERSION 3.2)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
 
 function(download_bundled_external remote_path lib_name prefix_var)
     set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}")
diff --git a/CMakeModules/CopyCitraQt5Deps.cmake b/CMakeModules/CopyCitraQt5Deps.cmake
new file mode 100644
index 0000000000..05f58cf9a4
--- /dev/null
+++ b/CMakeModules/CopyCitraQt5Deps.cmake
@@ -0,0 +1,17 @@
+function(copy_citra_Qt5_deps target_dir)
+    include(WindowsCopyFiles)
+    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+    set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin")
+    set(Qt5_PLATFORMS_DIR "${Qt5_DIR}/../../../plugins/platforms/")
+    set(PLATFORMS ${DLL_DEST}platforms/)
+    windows_copy_files(${target_dir} ${Qt5_DLL_DIR} ${DLL_DEST}
+        icudt*.dll
+        icuin*.dll
+        icuuc*.dll
+        Qt5Core$<$<CONFIG:Debug>:d>.*
+        Qt5Gui$<$<CONFIG:Debug>:d>.*
+        Qt5OpenGL$<$<CONFIG:Debug>:d>.*
+        Qt5Widgets$<$<CONFIG:Debug>:d>.*
+    )
+    windows_copy_files(citra-qt ${Qt5_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$<CONFIG:Debug>:d>.*)
+endfunction(copy_citra_Qt5_deps)
diff --git a/CMakeModules/CopyCitraSDLDeps.cmake b/CMakeModules/CopyCitraSDLDeps.cmake
new file mode 100644
index 0000000000..4f9e4aeb90
--- /dev/null
+++ b/CMakeModules/CopyCitraSDLDeps.cmake
@@ -0,0 +1,5 @@
+function(copy_citra_SDL_deps target_dir)
+    include(WindowsCopyFiles)
+    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
+    windows_copy_files(${target_dir} ${SDL2_DLL_DIR} ${DLL_DEST} SDL2.dll)
+endfunction(copy_citra_SDL_deps)
diff --git a/src/citra/CMakeLists.txt b/src/citra/CMakeLists.txt
index f9c488a1a0..ecb5d2dfe7 100644
--- a/src/citra/CMakeLists.txt
+++ b/src/citra/CMakeLists.txt
@@ -1,3 +1,5 @@
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
+
 set(SRCS
             emu_window/emu_window_sdl2.cpp
             citra.cpp
@@ -28,11 +30,6 @@ if(UNIX AND NOT APPLE)
 endif()
 
 if (MSVC)
-    include(WindowsCopyFiles)
-
-    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
-
-    windows_copy_files(citra ${SDL2_DLL_DIR} ${DLL_DEST} SDL2.dll)
-
-    unset(DLL_DEST)
+    include(CopyCitraSDLDeps)
+    copy_citra_SDL_deps(citra)
 endif()
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt
index a9dacd5f11..e1b3566bff 100644
--- a/src/citra_qt/CMakeLists.txt
+++ b/src/citra_qt/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
 
 set(SRCS
             config.cpp
@@ -107,27 +108,9 @@ if(UNIX AND NOT APPLE)
     install(TARGETS citra-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
 endif()
 
-if (Qt5_FOUND AND MSVC)
-    include(WindowsCopyFiles)
-
-    set(Qt5_DLL_DIR "${Qt5_DIR}/../../../bin")
-    set(Qt5_PLATFORMS_DIR "${Qt5_DIR}/../../../plugins/platforms/")
-    set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
-    set(PLATFORMS ${DLL_DEST}platforms/)
-
-    windows_copy_files(citra-qt ${Qt5_DLL_DIR} ${DLL_DEST}
-        icudt*.dll
-        icuin*.dll
-        icuuc*.dll
-        Qt5Core$<$<CONFIG:Debug>:d>.*
-        Qt5Gui$<$<CONFIG:Debug>:d>.*
-        Qt5OpenGL$<$<CONFIG:Debug>:d>.*
-        Qt5Widgets$<$<CONFIG:Debug>:d>.*
-    )
-    windows_copy_files(citra-qt ${Qt5_PLATFORMS_DIR} ${PLATFORMS} qwindows$<$<CONFIG:Debug>:d>.*)
-
-    unset(Qt5_DLL_DIR)
-    unset(Qt5_PLATFORMS_DIR)
-    unset(DLL_DEST)
-    unset(PLATFORMS)
+if (MSVC)
+    include(CopyCitraQt5Deps)
+    include(CopyCitraSDLDeps)
+    copy_citra_Qt5_deps(citra-qt)
+    copy_citra_SDL_deps(citra-qt)
 endif()