[Qbs] Build and run a AuxiliaryApplication before build a MainApplication

Карелин Павел hkarel at yandex.ru
Wed Feb 10 09:48:55 CET 2021


This morning I tried the following solution (see below). got this error

:-1: ошибка: The process 
'/home/hkarel/CProjects/QGit/build/Debug/bin/sonnet_parsetrigrams'
could not be started: execve: Permission denied.
The full command line invocation was: 
/home/hkarel/CProjects/QGit/build/Debug/bin/sonnet_parsetrigrams
/home/hkarel/CProjects/QGit/src/spellcheck/sonnet/trigrams 
/home/hkarel/CProjects/QGit/build/Debug/trigrams.map

I assumed that the sonnet_parsetrigrams helper appl would be built 
earlier than needed in the idtrigrams rule, but that didn't work.


--- qgit_project.qbs ---
import qbs
import "qbs/imports/QbsUtl/qbsutl.js" as QbsUtl

Project {
     name: "QGit (Project)"
     minimumQbsVersion: "1.18.0"
     qbsSearchPaths: ["qbs"]
     ...
     references: [
         "src/qgit.qbs",
         "src/spellcheck/sonnet/parsetrigrams.qbs",
     ]
}

--- parsetrigrams.qbs ---
import qbs
import qbs.FileInfo

Product {
     name: "SonnetParseTrigrams"
     targetName: "sonnet_parsetrigrams"
     condition: true

     type: "application"
     destinationDirectory: "./bin"

     Depends { name: "cpp" }
     Depends { name: "Qt"; submodules: ["core"] }

     cpp.defines: project.cppDefines
     cpp.cxxFlags: project.cxxFlags
     cpp.cxxLanguageVersion: project.cxxLanguageVersion

     // This declaration is needed to suppress Qt warnings
     cpp.systemIncludePaths: Qt.core.cpp.includePaths

     files: [
         "parsetrigrams.cpp"
     ]
}

--- qgit.qbs ---
import qbs
import qbs.FileInfo

Product {
     name: "QGit"
     targetName: "qgit"

     type: "application"
     destinationDirectory: "./bin"

     Depends { name: "cpp" }
     Depends { name: "SonnetParseTrigrams" }
     Depends { name: "Qt"; submodules: ["core", "widgets"] }

     ....

     Group {
         fileTags: "trigrams"
         //files: FileInfo.joinPaths(project.buildDirectory, "*.trgmap")
         //files: "spellcheck/sonnet/trigrams/*.trg"
         files: 
"/home/hkarel/CProjects/QGit/src/spellcheck/sonnet/trigrams/*"
     }
     Group {
         fileTagsFilter: ["trigrams-map"]
         //fileTagsFilter: ["sonnet-parse-trigrams-run"]
         fileTags: ["qt.core.resource_data"]
     }
     Qt.core.resourceFileBaseName: "trigrams1"
     Qt.core.resourcePrefix: "trigrams1"

     Rule {
         inputs: ["trigrams"]
         multiplex: true

         Artifact {
             fileTags: ["trigrams-map"]
             filePath: FileInfo.joinPaths(product.buildDirectory, 
"trigrams.map")
         }
         prepare: {
             //var runUtl = input.filePath;
             var runUtl = FileInfo.joinPaths(project.buildDirectory, 
"bin/sonnet_parsetrigrams");
             var sourceDir = FileInfo.joinPaths(product.sourceDirectory, 
"spellcheck/sonnet/trigrams");
             var outputFile = FileInfo.joinPaths(project.buildDirectory, 
"trigrams.map");

             console.info("=== runUtl ===");
             console.info(input);
             console.info(inputs);
             console.info(runUtl);
             console.info(sourceDir);
             console.info(outputFile);

             var cmd = new Command(runUtl, [sourceDir, outputFile]);
             cmd.description = "sonnet parse trigrams";
             cmd.highlight = "filegen";
             return cmd;
         }
     }
}

--
Pavel



09.02.2021 20:33, Карелин Павел пишет:
>
>
> 09.02.2021 16:06, Christian Kandeler пишет:
>> On 2/9/21 1:04 PM, Карелин Павел wrote:
>>> Hello!
>>>
>>> I need to build  components of the project  in a specific sequence:
>>> 1) Build of auxiliary generator program;
>>> 2) Generate a resource file using the generator received in step 1;
>>> 3) Add the resource file obtained in step 2 to project QRC-file;
>>> 4) Build the main project program with the QRC-file obtained in step 3.
>>>
>>> I previously asked a similar question 
>>> (https://lists.qt-project.org/pipermail/qbs/2018-August/002223.html),
>>> and how to perform steps 1, 2 I know roughly. However, this decision 
>>> seems to me to be somewhat confusing (not transparent),
>>> so I wanted to know maybe at the moment there is a simpler 
>>> (transparent) solution.
>>>
>>> I have no understanding of how, after points 1,2 to be followed 
>>> points 3 and 4, so I ask for help with the solution. 
>>
>> If by "add the resource file" you mean you have a hand-written qrc 
>> file and you want to merge a generated file into it, then that's not 
>> possible (unless you do the merging "manually" in a dedicated rule 
>> and tag the result afterwards). However, if you do it "correctly" by 
>> having the qrc file be auto-generated from files tagged as resource 
>> data, then the whole thing is straightforward.
>>
>> You might want to tell us what exactly you are struggling with and 
>> why, so it becomes easier to help.
> Yes, I do not particularly struggle with anything:) This task can be 
> solved in another way (without a resource file). I was just interested 
> in trying out QBS capabilities. Perhaps in the future there will be a 
> problem that can only be solved in this way.
>
> Here is my task: I am making a mechanism for checking spelling. The 
> mechanism requires a map of language trigrams. The trigram map is 
> generated from trigram files 
> (https://github.com/hkarel/qgit/tree/3x-spellcheck/src/spellcheck/sonnet/trigrams). 
> This work is just done by the utility "AuxiliaryApplication." Next, I 
> planned to add this trigram map to the program as a resource.
>
> Regarding auto-generated qrc file: if such a generated file can be 
> used together with the manual qrc file, then I will totally agree such 
> a solution.
>
>>
>>
>> Christian
>>
>> _______________________________________________
>> Qbs mailing list
>> Qbs at qt-project.org
>> https://lists.qt-project.org/listinfo/qbs
>
> _______________________________________________
> Qbs mailing list
> Qbs at qt-project.org
> https://lists.qt-project.org/listinfo/qbs

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20210210/e16a1739/attachment-0001.html>


More information about the Qbs mailing list