Results 1 to 3 of 3

Thread: deploy vcpkg dependencies in QtCreator-Cmake

  1. #1
    Join Date
    Jul 2012
    Posts
    247
    Thanks
    29
    Thanked 15 Times in 14 Posts
    Qt products
    Qt4
    Platforms
    Windows

    Default deploy vcpkg dependencies in QtCreator-Cmake

    Hi,

    I am porting my qmake project to cmake. So far it all goes well, but I have the following problem when hitting "build" from within qtcreator as opposed to manually running Cmake.

    My project links to several packages provided by the vcpkg manager, which integrates well with cmake.
    When i manually configure and compile my project with "cmake --build .", then cmake copies the .dll files from the vcpkg-libraries correctly to the build dir.
    But this does not happen when I hit "build" in QtCreator. The CMakeLists.txt is the exact same.

    Here is my CMakeFile. It's basically the default one generated by QtCreator for a widget app.
    The second line provides the vcpkg integration, and I then link to the library "capstone_dll" installed in vcpkg.


    Qt Code:
    1. cmake_minimum_required(VERSION 3.5)
    2.  
    3. set(CMAKE_TOOLCHAIN_FILE "C:/Users/memem/vcpkg/scripts/buildsystems/vcpkg.cmake")
    4.  
    5. project(widgetcmake VERSION 0.1 LANGUAGES CXX)
    6.  
    7. set(CMAKE_INCLUDE_CURRENT_DIR ON)
    8.  
    9. set(CMAKE_AUTOUIC ON)
    10. set(CMAKE_AUTOMOC ON)
    11. set(CMAKE_AUTORCC ON)
    12.  
    13. set(CMAKE_CXX_STANDARD 11)
    14. set(CMAKE_CXX_STANDARD_REQUIRED ON)
    15.  
    16. add_compile_definitions(QT_NO_KEYWORDS)
    17.  
    18.  
    19. # QtCreator supports the following variables for Android, which are identical to qmake Android variables.
    20. # Check https://doc.qt.io/qt/deployment-android.html for more information.
    21. # They need to be set before the find_package( ...) calls below.
    22.  
    23. #if(ANDROID)
    24. # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    25. # if (ANDROID_ABI STREQUAL "armeabi-v7a")
    26. # set(ANDROID_EXTRA_LIBS
    27. # ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
    28. # ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
    29. # endif()
    30. #endif()
    31.  
    32. find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
    33. find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
    34. find_package(capstone)
    35.  
    36.  
    37. include_directories(C:/Users/memem/vcpkg/installed/x64-windows/include)
    38. link_directories(C:/Users/memem/vcpkg/installed/x64-windows/lib)
    39.  
    40. set(PROJECT_SOURCES
    41. main.cpp
    42. mainwindow.cpp
    43. mainwindow.h
    44. mainwindow.ui
    45. )
    46.  
    47. if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    48. qt_add_executable(widgetcmake
    49. MANUAL_FINALIZATION
    50. ${PROJECT_SOURCES}
    51. )
    52. else()
    53. if(ANDROID)
    54. add_library(widgetcmake SHARED
    55. ${PROJECT_SOURCES}
    56. )
    57. else()
    58. add_executable(widgetcmake
    59. ${PROJECT_SOURCES}
    60. )
    61. endif()
    62. endif()
    63.  
    64. target_link_libraries(widgetcmake PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
    65. target_link_libraries(widgetcmake PRIVATE capstone_dll)
    66.  
    67.  
    68. set_target_properties(widgetcmake PROPERTIES
    69. MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    70. MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    71. MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    72. )
    73.  
    74. if(QT_VERSION_MAJOR EQUAL 6)
    75. qt_finalize_executable(widgetcmake)
    76. endif()
    To copy to clipboard, switch view to plain text mode 

  2. #2
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,248
    Thanks
    304
    Thanked 868 Times in 855 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: deploy vcpkg dependencies in QtCreator-Cmake

    I don't see anything in your cmake script that would cause the DLL to be copied. This seems to be something that the command line tool must do on its own, recognizing that one of the target link libraries is the .lib counterpart to a DLL. Try running the command line with the -trace or -trace-expand option turned on, so you can see what cmake is doing.

    I haven't used cmake with Qt Creator, but I would guess there is a similar way to provide the -trace runtime argument to the way Qt Creator invokes cmake so you can look for differences.

    Usually I have an explicit "install" command in my CMakelist.txt file that copies runtime dependencies to the output directory.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  3. The following user says thank you to d_stranz for this useful post:

    tuli (23rd August 2021)

  4. #3
    Join Date
    Jul 2012
    Posts
    247
    Thanks
    29
    Thanked 15 Times in 14 Posts
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: deploy vcpkg dependencies in QtCreator-Cmake

    There's no further commandlinetool involved. I just do "cmake .." + "cmake --build ."
    In the example: https://vcpkg.readthedocs.io/en/late...sing-packages/
    it says:
    > Note: The correct sqlite3.dll is automatically copied to the output folder when building for x86-windows. You will need to distribute this along with your application.
    I will diff the -trace and report back.

Similar Threads

  1. Replies: 0
    Last Post: 16th August 2016, 10:01
  2. QtCreator subdirs - Dependencies of project
    By folibis in forum Qt Tools
    Replies: 1
    Last Post: 13th September 2013, 09:03
  3. Replies: 6
    Last Post: 3rd December 2010, 21:51
  4. application dependencies
    By yagabey in forum Qt Programming
    Replies: 1
    Last Post: 18th March 2009, 08:33
  5. What are the dependencies that a .exe file needs??
    By srohit24 in forum Installation and Deployment
    Replies: 5
    Last Post: 5th March 2009, 18:25

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.