[CMake] Copy dlls to release and debug folder
Lloyd
lloydkl.tech at gmail.com
Fri Apr 19 02:43:18 EDT 2013
Thankyou Thomas, it works now... Another issue I was faced with the first
script is, it assumes that the dlls are in the lib folder of Qt (I think
you build qt from source). I have downloaded the prebuilt Qt library, in
that the dlls are in the bin folder. I modified the macro you have given,
as below...
MACRO(GetDLLs DEBUG_NAME RELEASE_NAME)
#Copy Debug dlls
LIST(APPEND ${DEBUG_NAME} "${QT_BINARY_DIR}/QtGuid4.dll")
...
On Thu, Apr 18, 2013 at 6:51 PM, Thomas Richard
<Thomas.Richard at imgtec.com>wrote:
> Normally when you find the Qt4 package it selects some defaults libraries
> (and the QT_USE_FILE). But you have to specify some extra modules you may
> need before including the QT_USE_FILE. The QT_USE_FILE defines the
> dependencies and includes the folders you need.
>
> For example I have:
>
> find_package(Qt4 REQUIRED)
>
> # loads of crap about my libraries
>
> set (QT_USE_QTGUI TRUE)
> include(${QT_USE_FILE})
>
> set (SOURCES #with my sources)
> set (HEADERS # with my headers)
> set(HEADERS_MOC) # to define an empty variable
> QT4_WRAP_CPP(HEADERS_MOC ${HEADERS})
>
> add_executable(ParamGui ${SOURCES} ${HEADERS_MOC} ${HEADERS})
> set_source_files_properties(${HEADERS_MOC} PROPERTIES GENERATED TRUE)
> target_link_libraries(ParamGui ${QT_LIBRARIES})
>
> From: cmake-bounces at cmake.org [mailto:cmake-bounces at cmake.org] On Behalf
> Of Lloyd
> Sent: 18 April 2013 12:40
> To: Thomas Richard
> Cc: CMake ML
> Subject: Re: [CMake] Copy dlls to release and debug folder
>
> I assume that this is the recommended approach.
>
> I tried to use the script you have provided, the call GetQtDLLs(DEBUG_DLLS
> RELEASE_DLLS) is not populating any of the variables (DEBUG_DLLS or
> RELEASE_DLLS) with qt dll names. I am new to cmake, Am I missing something?
>
>
> Thanks,
> Lloyd
>
> On Thu, Apr 18, 2013 at 4:21 PM, Thomas Richard <Thomas.Richard at imgtec.com>
> wrote:
> 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: cmake-bounces at cmake.org [mailto:cmake-bounces at cmake.org] 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20130419/b6d42710/attachment.htm>
More information about the CMake
mailing list