1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\previouspage Project
\nextpage PropertyOptions
\qmltype Properties
\inqmlmodule QbsLanguageItems
\ingroup list-of-items
\keyword QML.Properties
\brief Provides conditional setting of properties.
\note This topic documents the Properties item in the context of \l{Product}
{products}. For more information about using it in sub-projects, see
\l{SubProject}.
The Properties item is an auxiliary item for setting multiple property values conditionally.
In the following example, two properties are set if the project is built for Windows:
\code
Product {
Properties {
condition: qbs.targetOS.includes("windows")
cpp.defines: ["ON_WINDOWS"]
cpp.includePaths: ["extraWindowsIncludes"]
}
}
\endcode
As the above example demonstrates, the \c Properties item is especially useful if there are
several properties whose values depend on the same set of conditions.
These conditions do not need to be mutually exclusive, but care should be taken not to set
the same scalar property in more than one matching \c Properties item. \QBS makes no guarantees
about the value of the property in such cases.
If the same property is set both inside and outside of a \c Properties
item, the outside binding is only considered if none of the \c Properties conditions
match, that is, it acts as an "else" case.
\code
Product {
Properties {
condition: qbs.targetOS.includes("windows")
cpp.defines: ["ON_WINDOWS"]
cpp.includePaths: ["myWindowsIncludes"]
}
Properties {
condition: qbs.targetOS.includes("linux")
cpp.defines: ["ON_LINUX"]
cpp.includePaths: ["myLinuxIncludes"]
}
cpp.defines: ["ON_UNKNOWN_PLATFORM"]
}
\endcode
is roughly equivalent to
\code
Product {
cpp.defines: {
if (qbs.targetOS.includes("windows"))
return ["ON_WINDOWS"];
if (qbs.targetOS.includes("linux"))
return ["ON_LINUX"];
return ["ON_UNKNOWN_PLATFORM"];
}
cpp.includePaths: {
if (qbs.targetOS.includes("windows"))
return ["myWindowsIncludes"];
if (qbs.targetOS.includes("linux"))
return ["myLinuxIncludes"];
return base ? base : original;
}
}
\endcode
In Properties items, one can access the \l{Special Property Values#outer}{outer} value of a
property.
\code
Product {
Properties {
condition: qbs.targetOS.includes("windows")
cpp.defines: outer.concat("ON_WINDOWS") // === ["FOO", "ON_WINDOWS"]
}
Properties {
condition: qbs.targetOS.includes("linux")
cpp.defines: ["ON_LINUX"] // === ["ON_LINUX"]
}
cpp.defines: ["FOO"]
}
\endcode
*/
/*!
\qmlproperty bool Properties::condition
The condition to be used for the other bindings in this item.
\default true
\note The special value \c undefined can be used to indicate
that this condition should be considered true if and only if none of the other
Properties items matched for a given property binding.
*/
/*!
\qmlproperty bool Properties::overrideListProperties
List properties set within this item will override the values coming from
modules, rather than getting merged with them, which is the default behavior.
Use this in the rare case that a module you depend on inserts a value into
a list property that is problematic for some product.
\defaultvalue \c false
*/
|