[QBS] RFC: Deployment support for qbs

joerg.bornemann at nokia.com joerg.bornemann at nokia.com
Thu Feb 23 08:38:13 CET 2012

Hi Mathieu,

What do you mean by "only making one of those"?
If you're instantiating a transformer like in tests/manual/transformers, you're creating exactly one artifact (== target in make terms).

To adapt your example, the sourceCode in JavaScriptCommand would need a function to start a process and read its output. Until that's implemented, you can put your code to create the installer into a separate script:

Transformer {
    Artifact {
        fileName: "installer.exe"
    prepare: {
        var cmd = new Command("python", "createInstaller.py");
        cmd.description = "create installer";
        return cmd;



From: ext Mathieu Bouchard [mbouchar at gmail.com]
Sent: 23 February 2012 03:20
To: Bornemann Joerg (Nokia-MP/Berlin)
Cc: Kandeler Christian (Nokia-MP/Berlin); qbs at qt-project.org
Subject: Re: [QBS] RFC: Deployment support for qbs

Yes, something like QMAKE_EXTRA_TARGETS. I am calling system(git describe --tags) and I get the output and pass it to makensis in a custom target:

SCM_VERSION = $$system(git describe --tags)
!isEmpty(QMAKE_SH) {
    # qmake in a unix shell requires escaping on the parenthesis
    VI_VERSION = $$system(python -c 'print\\(\\"$${SCM_VERSION}\\".split\\(\\"-\\"\\)[0]\\)')
} else {
    VI_VERSION = $$system(python -c 'print(\\"$${SCM_VERSION}\\".split(\\"-\\")[0])')

win32 {
    createinstaller.target = installer
    createinstaller.commands = $${QMAKE_COPY} \"$${TARGET_FILENAME}\" \"$${DESTDIR_WIN}\" &&
    createinstaller.commands += cd \"$$PWD/win32\" && makensis -DVIVERSION=$${VI_VERSION} -DVERSION=$${SCM_VERSION} installer.nsi
    createinstaller.depends = first
    QMAKE_EXTRA_TARGETS += createinstaller

How do we tell qbs to only make one of those?

On Wed, Feb 22, 2012 at 5:28 AM, Joerg Bornemann <joerg.bornemann at nokia.com<mailto:joerg.bornemann at nokia.com>> wrote:
On 22/02/2012 06:54, ext Mathieu Bouchard wrote:

You could also probably cover more platforms by adding custom targets
support. For example, I currently use some "undocumented" qmake
functions to add custom targets to the build process. They are used to
provide a "make installer" target on Windows that calls makensis to
create an installer file. On OSX, this is used to call macqtdeploy.

If I understand you correctly, you want something like QMAKE_EXTRA_TARGETS or QMAKE_EXTRA_COMPILERS.

There is support for adding custom artifacts and transformers.
See tests/manual/transformers for an example.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20120223/01972de9/attachment.html>

More information about the Qbs mailing list