conan.tools.qbs
QbsProfile
Important
This feature is still under development, while it is recommended and usable and we will try not to break them in future releases, some breaking changes might still happen if necessary to prepare for the Conan 2.0 release.
Available since: 1.33.0
The QbsProfile can be used in the generate() method:
from conan import ConanFile
from conan.tools.qbs import QbsProfile
class App(ConanFile):
settings = "os", "arch", "compiler", "build_type"
requires = "hello/0.1"
options = {"shared": [True, False]}
default_options = {"shared": False}
def generate(self):
tc = QbsProfile(self)
tc.generate()
The QbsProfile will generate the following file during conan install
command (or before calling the build() method when the package is being
built in the cache): conan_toolchain_profile.qbs. This file will contain a qbs profile
named conan_toolchain_profile.
conan_toolchain_profile.qbs will contain the definitions of all the Qbs properties related to the Conan options and settings for the current package, platform, etc. This includes the following:
Detection of compiler.
Based on the compiler set in environment variable
CC.Uses detected system compiler based on Conan setting
compilerif environment variableCCis not set.
Detection of compiler flags from environment (as defined at https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html):
ASFLAGSCFLAGSCPPFLAGSCXXFLAGSLDFLAGS
Detection of sysroot from environment.
Detection of
build_typefrom Conan settings.Detection of
archfrom Conan settings.Detection of
compiler.cxxstdfrom Conan settings.Detection of
fPICbased on the existence of such option in the recipe.
Qbs
Available since: 1.33.0
If you are using Qbs as your build system, you can use the Qbs build helper.
from conan import ConanFile
from conan.tools.qbs import Qbs
class ConanFileToolsTest(ConanFile):
...
def build(self):
qbs = Qbs(self)
qbs.build()
Constructor
class Qbs(object):
def __init__(self, conanfile, project_file=None)
- Parameters:
conanfile (Required): Use
selfinside aconanfile.py.project_file (Optional, Defaulted to
None): Path to the root project file.
Attributes
profile
Defaulted to: conan_toolchain_profile
Specifies the qbs profile to build the project for.
Methods
add_configuration()
def add_configuration(self, name, values)
Add a build configuration to use.
- Parameters:
name (Required): Specifies build configuration name.
values (Required): A dict of properties set for this build configuration.
build()
def build(self, products=None)
Build Qbs project.
- Parameters:
products (Optional, Defaulted to
None): Specifies a list of products to build. IfNonebuild all products which have the qbs propertybuildByDefaultset totrue.
build_all()
def build_all(self)
Build all products of Qbs project, even products which set the qbs property buildByDefault set to false
install()
def install(self)
Install products.
Example
A typical usage of the Qbs build helper, if you want to be able to both execute conan create and also build your package for a library locally (in your user folder, not in the local cache), could be:
from conan import ConanFile
from conan.tools.qbs import Qbs
class HelloConan(ConanFile):
name = "hello"
version = "0.1"
settings = "os", "compiler", "build_type", "arch"
generators = "qbs"
exports_sources = "src/*", "*.qbs"
no_copy_source = True
requires = "zlib/1.2.11"
def build(self):
qbs = Qbs(self)
qbs.add_configuration("default", {
"project.conanBuildInfo", self.build_folder + "/conanbuildinfo.qbs"
})
qbs.build()
def package(self):
self.copy("*.h", dst="include", src="src")
self.copy("*.lib", dst="lib", keep_path=False)
self.copy("*.dll", dst="bin", keep_path=False)
self.copy("*.dylib*", dst="lib", keep_path=False)
self.copy("*.so", dst="lib", keep_path=False)
self.copy("*.a", dst="lib", keep_path=False)
def package_info(self):
self.cpp_info.libs = ["hello"]
Note the qbs generator, which generates the conanbuildinfo.qbs file, to process
dependencies information. Setting no_copy_source = True helps qbs to pick the right project file
and not get confused by the generated files.
The hello.qbs could be as simple as:
Project {
readonly property path conanBuildInfo
references: conanBuildInfo
DynamicLibrary {
name: "hello"
version: "0.1.0"
files: "src/hello.cpp"
cpp.cxxLanguageVersion: "c++11"
Depends { name: "cpp" }
Depends { name: "zlib" }
}
}