[QBS] Always build an artifact

Christian Kandeler christian.kandeler at theqtcompany.com
Fri Dec 5 10:15:59 CET 2014


On 12/05/2014 08:53 AM, Stéphane Fabry wrote:
> - Depends{name:"obj"}  does not seems to work, it says "Product
> dependency 'obj' not found for profile ..."

Huh? "obj" is an input tag to your rule, not a product. It's the tag 
that qbs gives to object files created by the compiler.

> - I updated the my example to use output.filePath but in either way I
> can't get the buildtag.txt file, the command is run but I can't found
> the generated file... is the example too trivial (no source to build ?)

It's where you specified it to be in the Artifact item. Note that 
relative paths are anchored at the product build directory.

> - I can download and build qbs from master but then how should I
> configure QtCreator to use the version I've just build ? Is it just the
> qbs.exe to copy into the Tools directory ?

No, you'd have to use Creator from the master branch as well.


Christian

> Le 04-12-14 16:13, Christian Kandeler a écrit :
>> On 12/04/2014 03:00 PM, Stéphane Fabry wrote:
>>> I tried to do what you explained, but can't get it working.
>> Sorry, I made two mistakes in my explanation:
>>       1) You don't need a pseudo-artifact. Just set "alwaysUpdated" to
>>          false in your real artifact.
>>       2) This works only in master, not in 1.3.
>> So, what's a workaround you can use in 1.3? Maybe have a dependency on
>> the "obj" tag? If no object file changes, you won't have a new build, right?
>>
>>
>> Christian
>>
>> (Btw., in your example you create the "build.txt" file not at the place
>> you specified in the Artifact item. To prevent such inconsistencies, we
>> recommend using the outputs variable to access these paths.)
>>
>>> Here is the minimal project I tried:
>>>
>>> importqbs1.0
>>>
>>> import  qbs.TextFile
>>>
>>> import  qbs.FileInfo
>>>
>>> Product  {
>>>
>>>       name:  "Build  Tag"
>>>
>>>       type:  "buildtag"
>>>
>>>       targetName:  "buildtag.txt"
>>>
>>>       Group  {
>>>
>>>           name:  "Fake  input"
>>>
>>>           files:  "fake.in"
>>>
>>>           fileTags:  ["in_tag"]
>>>
>>>       }
>>>
>>>       Rule  {
>>>
>>>           inputs:  ["in_tag"]
>>>
>>>           Artifact  {
>>>
>>>               filePath:  "buildtag.txt"
>>>
>>>               fileTags:  "buildtag"
>>>
>>>           }
>>>
>>>           Artifact  {
>>>
>>>               alwaysUpdated:  false
>>>
>>>               filePath:  "fakeOutput"
>>>
>>>           }
>>>
>>>           prepare:  {
>>>
>>>               var  cmd  =  new  JavaScriptCommand();
>>>
>>>               cmd.description  =  "Update  build  date  tag  !"
>>>
>>>               cmd.sourceCode  =  function()  {
>>>
>>>                   var  file  =  new  TextFile("./buildtag.txt",  TextFile.WriteOnly);
>>>
>>>                   var  today  =  new  Date()
>>>
>>>                   file.writeLine(today.toISOString());
>>>
>>>                   file.close();
>>>
>>>               }
>>>
>>>               return  cmd;
>>>
>>>           }
>>>
>>>       }
>>>
>>> }
>>>
>>>
>>> Thanks
>>>
>>>
>>>
>>> Le 04-12-14 10:59, Christian Kandeler a écrit :
>>>> On 12/03/2014 10:18 PM, Stéphane Fabry wrote:
>>>>> I'm trying to create an artefact (a simple text file) that contain the
>>>>> last date of build,
>>>>> so i just need to write the date 'now' each time the project is build.
>>>>>
>>>>> The problem is I don't know how to tell qbs to rebuild the artefact each
>>>>> time the project is build (or partially build) ?
>>>>>
>>>>> Has someone an idea how to do this ?
>>>> Yeah, we really should add some rule property that makes this kind of
>>>> thing straightforward. You could file a bug report to enhance the
>>>> visibility of this issue.
>>>> I assume you are using a Transformer item now? The workaround is to use
>>>> a rule instead (give some random input tag, as there needs to be at
>>>> least one) and in this rule, in addition to your real output artifact,
>>>> declare a second one that you will never create and set its
>>>> "alwaysUpdated" property to false (the filePath can be anything, as long
>>>> as it's uniqe). This should achieve what you want.
>>>>
>>>>
>>>> Christian
>>>>
>>>> _______________________________________________
>>>> QBS mailing list
>>>> QBS at qt-project.org
>>>> http://lists.qt-project.org/mailman/listinfo/qbs
>>> --
>>> *Stéphane Fabry*, Project & IT Manager
>>> +32 (0)4 367 07 92
>>> *X-RIS* | /X-Ray Imaging Solutions/
>>> www.xris.eu/contact.html
>> _______________________________________________
>> QBS mailing list
>> QBS at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/qbs
>
> --
> *Stéphane Fabry*, Project & IT Manager
> +32 (0)4 367 07 92
> *X-RIS* | /X-Ray Imaging Solutions/
> www.xris.eu/contact.html
>
>
> _______________________________________________
> QBS mailing list
> QBS at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/qbs
>




More information about the Qbs mailing list