From ec79756c425b101ee21fa94d2bee67d603de8aba Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Sat, 31 Jan 2015 22:40:36 -0600 Subject: [PATCH] cmake: copy DLLs to build directory in MSVC this is done as a POST_BUILD step --- CMakeLists.txt | 16 ++++++++++++++++ src/sdl/CMakeLists.txt | 36 ++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6902829f..844555c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,22 @@ macro(add_framework fwname appname) endif() endmacro() +# Macro to copy Windows DLLs to Debug/Release folder for easy debugging +# Note: this is general purpose, we could copy anything. Just using for DLLs on MSVC though +macro(copy_files_to_build_dir target dlllist_var) + if(MSVC) + # http://stackoverflow.com/a/26983405/3064195 + foreach(dlllist_item ${${dlllist_var}}) + get_filename_component(dllname ${dlllist_item} NAME) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${dlllist_item} + ${CMAKE_CURRENT_BINARY_DIR}/\$\(Configuration\)/${dllname} + ) + endforeach() + endif() +endmacro() + # 64-bit check if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) message(STATUS "Target is 64-bit") diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index 77b6d107..383e5025 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -179,32 +179,32 @@ if(${SDL2_FOUND}) endif() if(${CMAKE_SYSTEM} MATCHES Windows) - find_library(SRB2_SDL2_DLL_SDL2 "SDL2.dll") + set(win_extra_dll_list "") + macro(getwinlib dllname defaultname) + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}") + list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) + endmacro() + getwinlib(SDL2 "SDL2.dll") if(${SRB2_CONFIG_SDL2_USEMIXER}) - find_library(SRB2_SDL2_DLL_SDL2_mixer "SDL2_mixer.dll") - find_library(SRB2_SDL2_DLL_libmikmod-2 "libmikmod-2.dll") - find_library(SRB2_SDL2_DLL_libogg_0 "libogg-0.dll") - find_library(SRB2_SDL2_DLL_libvorbis_0 "libvorbis-0.dll") - find_library(SRB2_SDL2_DLL_libvorbisfile_3 "libvorbisfile-3.dll") - find_library(SRB2_SDL2_DLL_smpeg2 "smpeg2.dll") + getwinlib(SDL2_mixer "SDL2_mixer.dll") + getwinlib(libmikmod-2 "libmikmod-2.dll") + getwinlib(libogg_0 "libogg-0.dll") + getwinlib(libvorbis_0 "libvorbis-0.dll") + getwinlib(libvorbisfile_3 "libvorbisfile-3.dll") + getwinlib(smpeg2 "smpeg2.dll") endif() if(${SRB2_CONFIG_HAVE_GME}) - find_library(SRB2_SDL2_DLL_libgme "libgme.dll") + getwinlib(libgme "libgme.dll") endif() install(PROGRAMS - ${SRB2_SDL2_DLL_SDL2} - - ${SRB2_SDL2_DLL_SDL2_mixer} - ${SRB2_SDL2_DLL_libmikmod} - ${SRB2_SDL2_DLL_libogg_0} - ${SRB2_SDL2_DLL_libvorbis_0} - ${SRB2_SDL2_DLL_libvorbisfile_3} - ${SRB2_SDL2_DLL_smpeg2} - - ${SRB2_SDL2_DLL_libgme} + ${win_extra_dll_list} DESTINATION . ) + + # We also want to copy those DLLs to build directories on MSVC. + # So we'll add a post_build step. + copy_files_to_build_dir(${SRB2_SDL2_EXE_NAME} win_extra_dll_list) endif()