[QBS] Functions in QBS scripts and accessing properties from them.

Denis Shienkov denis.shienkov at gmail.com
Thu May 15 13:39:43 CEST 2014


E.g. IMHO, in your case should be like this:


= myproject/myproject.qbs =

import qbs 1.0

Project {
    qbsSearchPaths: "qbs"

    references: [
        "app/app.qbs",
    ]
}


= myproject/qbs/imports/MyFunctions/functions.js =

function findGnuToolsDir()
{
...
}


= myproject/app/app.qbs =

import qbs.base 1.0
import MyFunctions

Application {
    name: "myapplication"
    ...
    ...
    property string gnuToolsDir: YourFunctions.findGnuToolsDir();
    ...
    ...

}

But, if to be honest, I do not know how to do it by other way (I even do
not trying do check other way). :)

BR,
Denis



2014-05-15 15:26 GMT+04:00 Tim Hutt <tdhutt at gmail.com>:

> Is there no way to do this in two files instead of three? It doesn't seem
> like I can put the `import YourFunctions` before the `Project`, so I need a
> separate file for the Project and Product, and then a third for the
> javascript. Is that right?
>
> Cheers,
>
> Tim
>
>
> On 15 May 2014 10:37, Denis Shienkov <denis.shienkov at gmail.com> wrote:
>
>> Hi,
>>
>> 1. Your function shall be in the functions.js file , e.g. in:
>> /yourproject/qbs/imports/YourFunctions/functions.js
>> 2. Also your Project should have an option:
>>
>> Project {
>> ...
>> qbsSearchPaths: "qbs"
>> ...
>> }
>>
>> 3. Your Product's file should contains:
>>
>> ...
>> import YourFunctions
>> ...
>> ...
>> property string gnuToolsDir: YourFunctions.findGnuToolsDir();
>> ...
>>
>> I would make it so. Also you can look how this done by analogy, e.g. in
>> QtCreator's sources.
>>
>>
>> BR,
>> Denis
>>
>>
>>
>>
>> 2014-05-15 12:30 GMT+04:00 Tim Hutt <tdhutt at gmail.com>:
>>
>>>  Hi,
>>>
>>> I have a QBS script that depends on using the GNU Arm toolchain, and I
>>> want it to automatically find them (on Windows for now). In my QBS I have
>>> this line:
>>>
>>> 	property string gnuToolsDir: "C:/Program Files/GNU Tools ARM Embedded/4.8 2014q1"
>>>
>>>
>>> And then I use that elsewhere. I want to set it to be a function, like
>>> this:
>>>
>>>  	function findGnuToolsDir()
>>>
>>> 	{
>>>
>>> 		// TODO: Fancy searching function.
>>>
>>> 		return "C:/Program Files/GNU Tools ARM Embedded/4.8 2014q1";
>>>
>>> 	}
>>>
>>> 	 	property string gnuToolsDir: findGnuToolsDir();
>>>
>>>
>>> But that doesn't work (says it can't find the function). Additionally, I can't seem to access the property in my Rules - it says the variable doesn't exist.
>>>
>>>
>>>
>>> 	Rule {
>>>
>>> 		// ...
>>>
>>> 		prepare: {
>>>
>>>
>>> 			// None of these work:
>>>
>>> 			var objCopyPath = gnuToolsDir + "/bin/arm-none-eabi-objcopy.exe";
>>>
>>> 			var objCopyPath = parent.gnuToolsDir + "/bin/arm-none-eabi-objcopy.exe";
>>>
>>> 			var objCopyPath = product.gnuToolsDir + "/bin/arm-none-eabi-objcopy.exe";
>>>
>>> 			// ...
>>>
>>> 		}
>>>
>>> 	}
>>>
>>>
>>> Any ideas? I've seen the Probe item but it doesn't seem suitable - as far as I can tell it just determines the existence of a library or tool rather than its location.
>>>
>>>
>>> Cheers,
>>>
>>>
>>> Tim
>>>
>>>
>>> _______________________________________________
>>> QBS mailing list
>>> QBS at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/qbs
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20140515/96c8cbed/attachment.html>


More information about the Qbs mailing list