Hi Lloyd,
Personally I copy the DLLs to the VS folder (so that the program can be run
from visual studio) using the following script.
It looks more complicated than it is.
A macro is available to several of my projects to select which Qt module they
use and create a list of dlls to copy.
Then I simply choose where to copy the DLLs according to the generator.
I also add them to the list of files to install.
Finally the last line is to remove the command prompt opening.
MACRO(GetQtDLLs DEBUG_NAME RELEASE_NAME)
FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN
QAXSERVER QAXCONTAINER QTDECLARATIVE QTSCRIPT QTSVG QTUITOOLS
QTHELP
QTWEBKIT PHONON QTSCRIPTTOOLS QTMULTIMEDIA QTGUI QTTEST QTDBUS
QTXML QTSQL
QTXMLPATTERNS QTNETWORK QTCORE)
if (QT_USE_${module} OR QT_USE_${module}_DEPENDS)
string(REPLACE ".lib" ".dll" QT_${module}_DLL
"${QT_${module}_LIBRARY_DEBUG}")
set (${DEBUG_NAME} ${${DEBUG_NAME}} ${QT_${module}_DLL})
string(REPLACE ".lib" ".dll" QT_${module}_DLL
"${QT_${module}_LIBRARY_RELEASE}")
set (${RELEASE_NAME} ${${RELEASE_NAME}} ${QT_${module}_DLL})
endif()
ENDFOREACH(module)
ENDMACRO()
if (WIN32)
GetQtDLLs(DEBUG_DLLS RELEASE_DLLS)
if (${CMAKE_GENERATOR} MATCHES "Visual Studio 11")
# visual studio 12 expects the DLLs in the executable folder.
# but not the resources!
# can be changed into the environment property of the project
to include the project's directory
set (DLL_TO_DBG ${CMAKE_CURRENT_BINARY_DIR}/Debug)
set (DLL_TO_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/Release)
else()
# for other version of visual studio the DLLs are expected into
the project folder
set (DLL_TO_DBG ${CMAKE_CURRENT_BINARY_DIR})
set (DLL_TO_RELEASE ${CMAKE_CURRENT_BINARY_DIR})
endif()
foreach(dll ${DEBUG_DLLS})
file(COPY ${dll} DESTINATION ${DLL_TO_DBG})
endforeach()
foreach(dll ${RELEASE_DLLS})
file(COPY ${dll} DESTINATION ${DLL_TO_RELEASE})
endforeach()
install(FILES ${RELEASE_DLLS} DESTINATION ${INSTALL_FELIXPARAMGUI_PATH}
CONFIGURATIONS Release)
#
# this is disabled for debug only (so signal/slots connect failures are
seen)!
#
# this property is used to remove the prompt window when running the
GUI from the explorer on WIN32
# doesn't have effect on linux
#
set_target_properties(FelixParamGui PROPERTIES WIN32_EXECUTABLE
${FELIXPARAMGUI_WIN32EXE})
endif()
From: [email protected] [mailto:[email protected]] On Behalf Of
Lloyd
Sent: 18 April 2013 11:33
To: CMake ML
Subject: [CMake] Copy dlls to release and debug folder
Hi,
I was successful in creating and building a project using CMake on Windows
(Visual Studio). After the build when I try to run the application it throws an
error asking for the dlls of Qt (I know it is a common case in Windows, usually
we do copy the dlls to debug/release folder where the exe resides). When I
searched the mailing list, I have seen an advise to use
"add_custom_command(TARGET ...)". Is this the right approach? Wont it be
executed after each build, thus causing repeated dll copies?
Can you please suggest me the right way?
Thanks,
Lloyd
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake