On Tue, 12 Dec 2017 10:30:18 +0100
Ola Røer Thorsen <o...@silentwings.no> wrote:

> Is there some way to debug-print the contents of these groups as I go along
> writing the qbs file?

You could use the status command. Or, if you are using Qt Creator, they are 
simply listed in the project tree.

> Does this mean I need to know the exact list of files the code generator
> outputs before it is run? Normally I'd only know that after having run the
> code generator and look into it's output directory.

Then you'll have to run the tool in the outputArtifacts script already. Unless 
the tool has some special "dry-run" option, the actual command could then 
become a dummy.
The cleaner solution, assuming the tool is under your control, would be to give 
it such an option that prints a suitably formatted list of the outputs it would 

> Currently I'm trying to print the contents of headerInputs and
> templateInputs like this,
>             var headerInputs = inputs["generator.in.headers"];
>             var templateInputs = inputs["generator.in.templates"];
>             console.warn("headerInputs: " + headerInputs);
>             console.warn("templateInputs: " + templateInputs);

You'd typically use JSON.stringify here.

> But the output says "headerInputs: undefined" and "templateInputs:
> undefined"

That means you don't have any inputs with these tags. Double-check the 
spelling. There must be some sort of match though, because otherwise the rule 
would not have run (assuming you did not force it by setting alwaysRun or 
You can see all the inputs, including their file tags, by printing 

> >         prepare: {
> >             var generatorArgs = [];
> >             // Generate the command-line arguments for the generator tool
> >             // from the inputs and outputs variables.
> >             var cmd = new Command("generator", generatorArgs);
> >             cmd.description = "Running generator";
> >             return [cmd];
> >         }
> >
> >  
> I've hit some issue with the argument list/array. One of my argument
> strings contain a wildcard '*', which casues that string to be wrapped with
> '.
>             var generatorArgs = [
>                         product.sourceDirectory + "/api/some*files.h"),

This looks like the wrong thing to do. If you pass some wildcard strings 
instead of actual files, you are circumventing the build system, as it cannot 
do change tracking on the expanded files.
Instead, you should only pass actual file paths derived from the rule inputs. 

> Why does the Command object add the '' around strings with * in them, and
> is there some way to avoid that?

To prevent shell expansion, as the arguments are supposed to go to the command 
as-is. There has not yet been a use case to opt out of this, and I don't think 
yours is a valid one (as explained above).

Qbs mailing list

Reply via email to