diff --git a/CMakeLists.txt b/CMakeLists.txt
index e23d891cb1948d35458dba2e3e4c57eb0e38edd0..0fb5cb28fbd6eacb2459c848e91b2ba7ae86943b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,7 +48,7 @@ macro(copy_files_to_build_dir target dlllist_var)
 			add_custom_command(TARGET ${target} POST_BUILD
 				COMMAND ${CMAKE_COMMAND} -E copy_if_different
 				${dlllist_item}
-				${CMAKE_CURRENT_BINARY_DIR}/\$\(Configuration\)/${dllname}
+				$<TARGET_FILE_DIR:${target}>/${dllname}
 			)
 		endforeach()
 	endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9b5089e3a44853ba4c46d44d4ac797575cba38e7..6859e27c38414e61dc93ffdb166794fde3e7674f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -109,7 +109,6 @@ set(SRB2_CORE_HEADERS
 	z_zone.h
 
 	config.h.in
-	${CMAKE_CURRENT_BINARY_DIR}/config.h
 )
 
 set(SRB2_CORE_RENDER_SOURCES
@@ -171,10 +170,17 @@ if(NOT CLANG)
 	set(SRB2_CORE_SOURCES ${SRB2_CORE_SOURCES} string.c)
 endif()
 
+prepend_sources(SRB2_CORE_SOURCES)
+prepend_sources(SRB2_CORE_HEADERS)
+prepend_sources(SRB2_CORE_RENDER_SOURCES)
+prepend_sources(SRB2_CORE_GAME_SOURCES)
+
+set(SRB2_CORE_HEADERS ${SRB2_CORE_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/config.h)
 source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS})
 source_group("Renderer" FILES ${SRB2_CORE_RENDER_SOURCES})
 source_group("Game" FILES ${SRB2_CORE_GAME_SOURCES})
 
+
 set(SRB2_ASM_SOURCES
 	${CMAKE_CURRENT_SOURCE_DIR}/vid_copy.s
 )
@@ -241,6 +247,9 @@ if(${SRB2_CONFIG_HAVE_BLUA})
 		lua_script.h
 	)
 
+	prepend_sources(SRB2_LUA_SOURCES)
+	prepend_sources(SRB2_LUA_HEADERS)
+
 	source_group("LUA" FILES ${SRB2_LUA_SOURCES} ${SRB2_LUA_HEADERS})
 
 	set(SRB2_BLUA_SOURCES
@@ -294,6 +303,10 @@ if(${SRB2_CONFIG_HAVE_BLUA})
 		blua/lvm.h
 		blua/lzio.h
 	)
+
+	prepend_sources(SRB2_BLUA_SOURCES)
+	prepend_sources(SRB2_BLUA_HEADERS)
+
 	source_group("LUA\\Interpreter" FILES ${SRB2_BLUA_SOURCES} ${SRB2_BLUA_HEADERS})
 endif()
 
@@ -397,16 +410,16 @@ endif()
 
 add_definitions(-DCMAKECONFIG)
 
-add_library(SRB2Core STATIC
-	${SRB2_CORE_SOURCES}
-	${SRB2_CORE_HEADERS}
-	${SRB2_CORE_RENDER_SOURCES}
-	${SRB2_CORE_GAME_SOURCES}
-	${SRB2_LUA_SOURCES}
-	${SRB2_LUA_HEADERS}
-	${SRB2_BLUA_SOURCES}
-	${SRB2_BLUA_HEADERS}
-)
+#add_library(SRB2Core STATIC
+#	${SRB2_CORE_SOURCES}
+#	${SRB2_CORE_HEADERS}
+#	${SRB2_CORE_RENDER_SOURCES}
+#	${SRB2_CORE_GAME_SOURCES}
+#	${SRB2_LUA_SOURCES}
+#	${SRB2_LUA_HEADERS}
+#	${SRB2_BLUA_SOURCES}
+#	${SRB2_BLUA_HEADERS}
+#)
 
 add_subdirectory(sdl)
 
diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt
index 56dcb674d1442ce146c3044333598881bdde6732..b3fa5390c50a748d60e87920073f46f5c28ff117 100644
--- a/src/sdl/CMakeLists.txt
+++ b/src/sdl/CMakeLists.txt
@@ -46,9 +46,24 @@ find_package(SDL2)
 
 if(${SDL2_FOUND})
 	set(SRB2_SDL2_TOTAL_SOURCES
+		${SRB2_CORE_SOURCES}
+		${SRB2_CORE_HEADERS}
+		${SRB2_CORE_RENDER_SOURCES}
+		${SRB2_CORE_GAME_SOURCES}
+		${SRB2_LUA_SOURCES}
+		${SRB2_LUA_HEADERS}
+		${SRB2_BLUA_SOURCES}
+		${SRB2_BLUA_HEADERS}
 		${SRB2_SDL2_SOURCES}
 		${SRB2_SDL2_HEADERS}
 	)
+	
+	source_group("Main" FILES ${SRB2_CORE_SOURCES} ${SRB2_CORE_HEADERS})
+	source_group("Renderer" FILES ${SRB2_CORE_RENDER_SOURCES})
+	source_group("Game" FILES ${SRB2_CORE_GAME_SOURCES})
+	source_group("Assembly" FILES ${SRB2_ASM_SOURCES} ${SRB2_NASM_SOURCES})
+	source_group("LUA" FILES ${SRB2_LUA_SOURCES} ${SRB2_LUA_HEADERS})
+	source_group("LUA\\Interpreter" FILES ${SRB2_BLUA_SOURCES} ${SRB2_BLUA_HEADERS})
 
 	if(${SRB2_CONFIG_HWRENDER})
 		set(SRB2_SDL2_TOTAL_SOURCES ${SRB2_SDL2_TOTAL_SOURCES}
@@ -129,7 +144,7 @@ if(${SDL2_FOUND})
 		endif()
 	endif()
 
-	target_link_libraries(SRB2SDL2 PRIVATE SRB2Core)
+	#target_link_libraries(SRB2SDL2 PRIVATE SRB2Core)
 
 	if(${SRB2_USEASM})
 		if(${SRB2_CONFIG_YASM})