Jump to content

Using Conan for Qt6: Difference between revisions

From Qt Wiki
Samuli (talk | contribs)
mNo edit summary
Iieklund (talk | contribs)
No edit summary
Line 3: Line 3:
"Work in Progress"
"Work in Progress"


==Qt6 Add-on src package build using Conan package manager==
==Qt6 Additional Library src package build using Conan package manager==


To build Qt6 Add-on src packages using Conan, which is provided by the Qt Installer, you can follow these steps.
To build Qt6 Additional Library src packages using Conan, which is provided by the Qt Installer, you can follow these steps.
Note! This is still in beta phase i.e. you may need workarounds to get it working and instructions may change later.  
Note! This is still in beta phase i.e. you may need workarounds to get it working and instructions may change later.  


Line 13: Line 13:
*Qt Installer - install:
*Qt Installer - install:
**'''CMake''' (3.15 or higher is required)
**'''CMake''' (3.15 or higher is required)
***the Add-ons use the CMake itself for the build
***the Additional Libraries use the CMake itself for the build
**'''Conan''' (installs standalone conan(.exe) executable + settings files
**'''Conan''' (installs standalone conan(.exe) executable + settings files
**'''Ninja''' (CMake generator)
**'''Ninja''' (CMake generator)
**'''6.0.0 essentials binary package'''
**'''6.0.0 essentials binary package'''
**'''Add-on src package(s)''' needed in your CMake project
**'''Additional Library src package(s)''' needed in your CMake project
***Qt Installer provides Add-on packages under top-level "Additional libraries" node
***Qt Installer providesAdditional Library packages under top-level "Additional libraries" node
*Put the installed tools into your PATH, prepend to PATH if needed to avoid mixing with older versions in your system
*Put the installed tools into your PATH, prepend to PATH if needed to avoid mixing with older versions in your system
**<QtSdk>/Tools/CMake/bin
**<QtSdk>/Tools/CMake/bin
**<QtSdk>/Tools/Conan
**<QtSdk>/Tools/Conan
**<QtSdk>/Tools/Ninja
**<QtSdk>/Tools/Ninja
*'''Build the conan package'''
*'''Build the Additional Library conan package'''
**The "conan(.exe) install" commands below will install the built binaries also to your current working directory so you may want to:
***mkdir build_dir && cd build_dir
**Windows '''MSVC2019''':
**Windows '''MSVC2019''':
***For MSVC compiler open command prompt and execute vcvars64.bat
***For MSVC compiler open command prompt and execute vcvars64.bat
Line 35: Line 37:
**Linux '''gcc'''
**Linux '''gcc'''
***$conan install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/'''qt-6.0.0-gcc-x86_64''' -s build_type=Release -g cmake_paths -g=cmake -g deploy
***$conan install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/'''qt-6.0.0-gcc-x86_64''' -s build_type=Release -g cmake_paths -g=cmake -g deploy
**Currently the follwing Add-ons are available as conan pac<nowiki/>kages:
**Currently the follwing Additional Libraries are available<nowiki/> as Conan packages:
***qtnetworkauth
***qtnetworkauth
***qtimageformats
***qtimageformats
***qt3d
***qt3d
**<nowiki/> The '''cmake_'''<nowiki/>'''paths''' generator w<nowiki/>ill produce ''''conan'''<nowiki/>'''_paths.cmake'''<nowiki/>' to your working directory, include it in your CMake project
**<nowiki/> The '''cmake_'''<nowiki/>'''paths''' generator w<nowiki/>ill produce ''''conan'''<nowiki/>'''_paths.cmake'''<nowiki/>' to your working directory, include it in your CMake project
**<nowiki/><nowiki/> If you have a '''qmake''' based consuming project for the Add-o<nowiki/>n you can pass "-g qmake" -generator which will create ''''conanbuildinfo.pri'''<nowiki/>' file which you can include in your project.  [https://docs.conan.io/en/latest/integrations/build_system/qmake.html https://docs.conan.io/en/latest/integrations/build_system][https://docs.conan.io/en/latest/integrations/build_system/qmake.html /qmake.html]
**<nowiki/><nowiki/> If you have a '''qmake''' based consuming project for theAdditi<nowiki/>onal Library you can pass "-g qmake" -generator which will create ''''conanbu'''<nowiki/>'''ildinfo.pri'''<nowiki/>' file which you can include in your qmake project.  [https://docs.conan.io/en/latest/integrations/build_system/qmake.html https://docs.conan.io/en/latest/integrations/build_system][https://docs.conan.io/en/latest/integrations/build_system/qmake.html /qmake.html]
**After successful build the built package should exist in <nowiki/>your Conan cache: '$HOME/.conan/data/qtnetworkauth/6.0.0/qt/beta/package'
**After successful build the built package should exist in <nowiki/>your Conan cache: '$HOME/.conan/data/qtnetworkauth/6.0.0/qt/beta/package' and in your current working directory
***Note: If you have configured your conan home/cache folder differently the built package is located there
***Note: If you have configured your Conan home/cache folder differently the built package is located there
*Edit the CMakeLists.txt of your MyApp project
*Edit the CMakeLists.txt of your MyApp project


Line 84: Line 86:


==Conan profiles for Qt packages==
==Conan profiles for Qt packages==
The Qt Installer installs conan profile files for those Qt essential binary packages that are selected for installation by the user.
The Qt Installer installs Conan profile files for those Qt essential binary packages that are selected for installation by the user.


The profile files are installed in: <QtSdk>/Tools/Conan/profiles
The profile files are installed in: <QtSdk>/Tools/Conan/profiles
Line 90: Line 92:
The profile files contain settings that match the configuration that was used to build the matching essentials binary package.
The profile files contain settings that match the configuration that was used to build the matching essentials binary package.


The [env] section contains 'QT_PATH' which points to the essentials package installation. This way the add-on conan build recipe can locate the qt.toolchain.cmake file which is needed by the build recipe to build the add-on.
The [env] section contains 'QT_PATH' which points to the essentials package installation. This way the add-on Conan build recipe can locate the qt.toolchain.cmake file which is needed by the build recipe to build the Additional Library.
 
For Boot to Qt targets ('''Boot2Qt'''), the profiles do not have the QT_PATH env set and user needs to give this as environment variable when using conan (-e , --env) to point to the selected toolchain.


For Boot to Qt targets, the profiles do not have the QT_PATH env set and user needs to give this as environment variable when using conan (-e , --env) to point to the selected toolchain.


The profiles can be found from: https://code.qt.io/cgit/qt/qt-conan-config.git/ (https://codereview.qt-project.org/admin/repos/qt/qt-conan-config)
The profiles can be found from: https://code.qt.io/cgit/qt/qt-conan-config.git/ (https://codereview.qt-project.org/admin/repos/qt/qt-conan-config)
Line 103: Line 106:
==Further notes==
==Further notes==


*Make sure the conan(.exe) provided by the Qt Installer is prepended into the PATH to avoid mixing it with system conan (if installed)
*Ninja is the recommended CMake generator and should be used. E.g. on Windows you may get compilation time errors if using VS generator
*Ninja is the recommended CMake generator and should be used. E.g. on Windows you may get compilation time errors if using VS generator

Revision as of 06:04, 9 November 2020

"Work in Progress"

Qt6 Additional Library src package build using Conan package manager

To build Qt6 Additional Library src packages using Conan, which is provided by the Qt Installer, you can follow these steps. Note! This is still in beta phase i.e. you may need workarounds to get it working and instructions may change later.

Building

  • Install required development libraries: https://doc-snapshots.qt.io/qt6-dev/gettingstarted.html#platform-requirements
  • Qt Installer - install:
    • CMake (3.15 or higher is required)
      • the Additional Libraries use the CMake itself for the build
    • Conan (installs standalone conan(.exe) executable + settings files
    • Ninja (CMake generator)
    • 6.0.0 essentials binary package
    • Additional Library src package(s) needed in your CMake project
      • Qt Installer providesAdditional Library packages under top-level "Additional libraries" node
  • Put the installed tools into your PATH, prepend to PATH if needed to avoid mixing with older versions in your system
    • <QtSdk>/Tools/CMake/bin
    • <QtSdk>/Tools/Conan
    • <QtSdk>/Tools/Ninja
  • Build the Additional Library conan package
    • The "conan(.exe) install" commands below will install the built binaries also to your current working directory so you may want to:
      • mkdir build_dir && cd build_dir
    • Windows MSVC2019:
      • For MSVC compiler open command prompt and execute vcvars64.bat
        • e.g. "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat
      • $conan.exe install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/qt-6.0.0-msvc2019_64 -s build_type=Release -g cmake_paths -g=cmake -g deploy
    • Windows MinGW81:
      • For MinGW compiler add MinGW tools location to path
      • $conan.exe install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/qt-6.0.0-mingw81-x86_64 -s build_type=Release -g cmake_paths -g=cmake -g deploy
    • macOS clang
      • $conan install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/qt-6.0.0-macx-clang -s build_type=Release -g cmake_paths -g=cmake -g deploy
    • Linux gcc
      • $conan install qtnetworkauth/6.0.0@qt/beta --build=missing --profile=<QtSdk>/Tools/Conan/profiles/qt-6.0.0-gcc-x86_64 -s build_type=Release -g cmake_paths -g=cmake -g deploy
    • Currently the follwing Additional Libraries are available as Conan packages:
      • qtnetworkauth
      • qtimageformats
      • qt3d
    • The cmake_paths generator will produce 'conan_paths.cmake' to your working directory, include it in your CMake project
    • If you have a qmake based consuming project for theAdditional Library you can pass "-g qmake" -generator which will create 'conanbuildinfo.pri' file which you can include in your qmake project. https://docs.conan.io/en/latest/integrations/build_system/qmake.html
    • After successful build the built package should exist in your Conan cache: '$HOME/.conan/data/qtnetworkauth/6.0.0/qt/beta/package' and in your current working directory
      • Note: If you have configured your Conan home/cache folder differently the built package is located there
  • Edit the CMakeLists.txt of your MyApp project
   include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
   find_package(Qt6 COMPONENTS Widgets Network REQUIRED)
   find_package(Qt6 COMPONENTS NetworkAuth REQUIRED)
   add_executable(MyApp
     main.cpp
     mainwindow.cpp
     mainwindow.h
     mainwindow.ui
   )
   # Note! Temporary solution until fixed in Qt6 build system 
   foreach(prefix ${CMAKE_PREFIX_PATH})
       set(prefix_include "${prefix}/include")
           if(EXISTS "${prefix_include}")
               target_include_directories(MyApp PRIVATE "${prefix_include}")
           endif()
   endforeach()
   target_link_libraries(MyApp PRIVATE Qt::Widgets Qt::NetworkAuth)
  • Build 'MyApp'
    • $ cd myapp
    • $ mkdir build && cd build
    • $ cmake -G Ninja -D CMAKE_INSTALL_PREFIX=<QtSdk>/6.0.0/gcc_64 -D CMAKE_BUILD_TYPE=Release ..
    • $ cmake --build .
    • The MyApp should be in 'bin/* directory and you should be able to launch it
  • Running the application
    • The deploy generator "-g deploy" passed to conan deploys the build binaries from conan cache to your working directory
    • Windows:
      • Put the deployed binaries to the same directory of your built application
    • macOS
      • Put the deployed binaries to the same directory of your built application
      • export DYLD_FRAMEWORK_PATH with paths to 6.0.0 essentials & qtnetworkauth deploy directory
    • Linux:
      • Put the deployed binaries to the same directory of your built application

Conan profiles for Qt packages

The Qt Installer installs Conan profile files for those Qt essential binary packages that are selected for installation by the user.

The profile files are installed in: <QtSdk>/Tools/Conan/profiles

The profile files contain settings that match the configuration that was used to build the matching essentials binary package.

The [env] section contains 'QT_PATH' which points to the essentials package installation. This way the add-on Conan build recipe can locate the qt.toolchain.cmake file which is needed by the build recipe to build the Additional Library.

For Boot to Qt targets (Boot2Qt), the profiles do not have the QT_PATH env set and user needs to give this as environment variable when using conan (-e , --env) to point to the selected toolchain.


The profiles can be found from: https://code.qt.io/cgit/qt/qt-conan-config.git/ (https://codereview.qt-project.org/admin/repos/qt/qt-conan-config)

In case you want to install profiles by your self e.g. to some other location or you did not use Qt installer to install those you can use the following command:

- $conan config install <git-repo> -sf <path-in-git-repo> -tf <destination-path>

- e.g. $conan config install git://code.qt.io/qt/qt-conan-config.git -sf profiles/qt/linux/6.0.0 -tf /home/<user>/temp_path

Further notes

  • Ninja is the recommended CMake generator and should be used. E.g. on Windows you may get compilation time errors if using VS generator