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: [email protected] [mailto:[email protected]] 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 <[email protected]> 
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: [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

Reply via email to