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

Tim Hutt tdhutt at gmail.com
Thu May 15 12:39:14 CEST 2014


> It makes no sense to distribute this information as the location of the
toolchain is dependent on the host system.

True, but I'd like to be able to distribute a build file which is a little
bit intelligent about finding the tool chain. For example on Windows, the
default install directory is

C:\Program Files\GNU Tools ARM Embedded\4.8 2014q1

Obviously the version can change, so I'd like to be able to have something
that detects that so my instructions are:

1. Install the Gnu arm tools in the default location.
2. Run qbs my-project.qbs.

Rather than:

1. Install the Gnu arm tools.
2. Set up a profile, pointing it to the location of your tool chain.
3. Add all the custom compile and linker options that are required to the
profile.
4. Select the profile in the build setup.
5. Build the project.

I know that's probably not exactly how it would work, but I'm trying to
make a QBS file that others can easily use, so as much as possible
everything that needs to be set up should be distributable, and not depend
on hard-coded or manually specified paths. I think I'll stick with my
current somewhat hacky solution for now!

Cheers,

Tim


On 15 May 2014 10:58, Christian Kandeler <christian.kandeler at digia.com>wrote:

> On 05/15/2014 11:44 AM, Tim Hutt wrote:
> > Well I guess it is fairly special - I'm compiling stuff for a
> > microcontroller using gcc for arm embedded. It needs specific flags and
> > linker scripts and so on.
>
> See http://qt-project.org/doc/qbs-1.2/cpp-module.html for information on
> the cpp module.
>
> > Is there any documentation on profiles?
>
> For the command line, see the "qbs setup-toolchains" command. It comes
> with a "--help" option that should tell you everything you need to know.
>
> > The only thing I could find was on listing them with the qbs binary
> which I
> > don't have (since I'm using Qt Creator).
>
> Qt Creator will automatically create a qbs profile from your Kit.
> Additional properties can be set in Qt Creator's build step (or in your
> project files).
>
> > If I made a profile would I be
> > able to make it automatically find the arm gcc, and could I distribute
> > it with my code easily?
>
> The profile does not "find" anything, it *knows* where the toolchain is
> because it was given that information when it was created. It makes no
> sense to distribute this information as the location of the toolchain is
> dependent on the host system.
>
>
> Christian
>
> >
> > Thanks for the info Denis!
> >
> >
> > On 15 May 2014 10:33, Christian Kandeler <christian.kandeler at digia.com
> > <mailto:christian.kandeler at digia.com>> wrote:
> >
> >     On 05/15/2014 10:30 AM, Tim Hutt wrote:
> >      > 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).
> >
> >     Are you sure that's really what you want? Toolchain information
> >     typically comes from the "outside" via a profile, and then it just
> works
> >     automatically and its properties are available via the cpp module.
> >     Unless you use your toolchain in a very "special" way (i.e. not to
> >     compile your sources), then your current approach is probably wrong.
> >
> >
> >     Christian
> >
> >
> >     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 <mailto:QBS at qt-project.org>
> >      > http://lists.qt-project.org/mailman/listinfo/qbs
> >      >
> >
> >     _______________________________________________
> >     QBS mailing list
> >     QBS at qt-project.org <mailto:QBS at qt-project.org>
> >     http://lists.qt-project.org/mailman/listinfo/qbs
> >
> >
> >
> >
> > _______________________________________________
> > QBS mailing list
> > QBS at qt-project.org
> > http://lists.qt-project.org/mailman/listinfo/qbs
> >
>
> _______________________________________________
> 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/a8abaefc/attachment.html>


More information about the Qbs mailing list