Qbs

Blog Documentation Get Qbs Community
  • Qbs Manual
  • QbsProbes
  • ConanfileProbe
  • Qbs 2.4.0
  • ConanfileProbe

    Extracts information about dependencies from a Conan recipe file. More...

    Properties

    Detailed Description

    The ConanfileProbe interfaces Qbs to the Conan package manager. It runs conan install on a Conan recipe file such as conanfile.py or conanfile.txt and extracts all available meta information about package dependencies using the json generator. The output may be used to set up Profile items or module properties in products. ConanfileProbe can also be used to run other Conan generators and to retrieve their output.

    Note: This probe only works with Conan 1.x since the json generator was removed in Conan 2.0. Use the conan module provider and QbsDeps generator with Conan 2.0 instead.

    Examples

    In the following examples we assume that our project contains a conanfile.py. This file describes all dependencies of our project. The dependency packages are expected to export meta information to be consumed by our project.

    Including Files Generated by Conan

    Conan has a built-in qbs generator that creates a project file containing dummy products. This is the easiest way to access dependencies, but also the least flexible one. It requires each Conan package to export correct meta information and works only if the dependency is a library.

    import qbs.Probes
    
    Project {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: project.sourceDirectory + "/conanfile.py"
            generators: "qbs"
        }
    
        references: conan.generatedFilesPath + "/conanbuildinfo.qbs"
    
        CppApplication {
            type: "application"
            files: "main.cpp"
            Depends { name: "mylib" }
        }
    }

    Setting Module Properties in Products

    When a product depends on a Conan package that does not have a dedicated module, package meta information may be directly fed into the cpp module.

    This approach is very flexible.

    import qbs.Probes
    
    CppApplication {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: product.sourceDirectory + "/conanfile.py"
            options: ({opt1: "True"; opt2: "TheValue"})
        }
        cpp.includePaths: conan.dependencies["myLib"].include_paths
        cpp.libraryPaths: conan.dependencies["myLib"].lib_paths
        cpp.dynamicLibraries: conan.dependencies["mylib"].libs
    }

    Setting Up a Profile

    When multiple products depend on one or more Conan packages, the dependency information may be combined in a Profile. This is especially useful when Qbs modules are available for some of the packages, but some of their properties need to be initialized. Otherwise, it would have to be done manually in global profiles.

    import qbs.Probes
    
    Project {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: project.sourceDirectory + "/conanfile.py"
        }
        Profile {
            name: "arm-gcc"
            cpp.toolchainInstallPath: conan.dependencies["arm-none-eabi-gcc"].rootpath + "/bin"
            cpp.toolchainPrefix: "arm-linux-gnueabi-"
            qbs.toolchainType: "gcc"
        }
    }

    This allows fully automated dependency management, including compiler toolchains and is very useful when teams work in heterougeneous environments.

    Property Documentation

    additionalArguments : stringList

    Additional command line arguments that are appended to the conan install command.

    Default: []


    conanfilePath : path

    Path to a conanfile.py or conanfile.txt that is used by this probe.

    This property cannot be set at the same time as packageReference.

    Default: Undefined


    dependencies : var [read-only]

    This property contains the same information as json.dependencies, but instead of an array, dependencies is a map with package names as keys for convenient access.

    Default: Undefined


    executable : path

    The name of or the path to the Conan executable.

    Default: "conan.exe" on Windows, "conan" otherwise


    generatedFilesPath : path [read-only]

    The path of the folder where Conan generators store their files. Each instance of this probe creates a unique folder under Project.buildDirectory. The folder name is a hash of the arguments supplied to conan install.

    Default: Undefined


    generators : stringList

    Conan generators to be executed by this probe. The JSON generator is always enabled. Generated files are written to the generatedFilesPath folder.

    Default: ["json"]

    See also Available generators.


    json : var [read-only]

    The parsed output of Conan's JSON generator as a JavaScript object.

    Default: Undefined


    options : var

    Options applied to conan install via the -o flag. This property is an object in the form key:value.

    Example:

    options: ({someOpt: "True", someOtherOpt: "TheValue"})

    Default: Undefined


    packageReference : string

    Reference of a Conan package in the form name/version@user/channel. Use this property if you want to probe an existing package in the local cache or on a remote.

    This property cannot be set at the same time as conanfilePath.

    Default: Undefined


    settings : var

    Settings applied to conan install via the -s flag. This property is an object in the form key:value.

    Example:

    settings: ({os: "Linux", compiler: "gcc"})

    Default: Undefined


    verbose : var

    Set to true to print all output of `conan install`. If this property is false only error output will be printed.

    Default: false