On Wed, 7 Feb 2018 12:34:47 +0100 Ola Røer Thorsen <[email protected]> wrote:
> - How does Qbs keep track of depedencies, like when including c-headers > that include other c-headers etc.? That's part of the up-to-date check for object files. If qbs detects that a change is possible (because either a source file or a dependency collected in an earlier run of the scanner has changed), then the includes are re-scanned, the corresponding files are found via cpp.includePaths and their timestamps are checked. > - Is the compiler used for the scanning of dependencies, or does Qbs scan > everyting itself? qbs does that. Known limitations: ifdefs are not considered (all branched are added to the dependency list), and the rather weird "header name is a macro" construct is not understood: #define MY_HEADER "header.h" #include MY_HEADER > - Is the file timestamps used to check for modified files, or a checksum of > the contents? Timestamps. > - Will/could Qbs be able to scan dependencies in ld linker scripts? We've > got several of those where there are .ld files with "INCLUDE > xxxxx.ldscript" inside, and it's important that binaries are linked again > if any of those are modified. If Qbs can't scan these itself, is it > possible to somehow list those files so that the linking can be done again > if any of them are modified? Approach 1: Use a Scanner item with "linkerscript" as the input tag. http://doc-snapshots.qt.io/qbs-1.11/qml-qbslanguageitems-scanner.html Approach 2: If the included scripts are all part of your project, it might be simpler to so somthing like this (untested): Product { Group { name: "linker script includes" files: ["inc1.ldscript, "inc2.ldscript", "inc3.ldscript"] fileTags: ["linkerscript.include"] } Group { name: "main linker script" files: ["thelinkerscript.ld"] fileTags: ["linkerscript.in"] } Rule { inputs: ["linkerscript.in"] auxiliaryInputs: ["linkerscript.include"] Artifact { filePath: "thelinkerscript.ld"; fileTags: ["linkerscript"] } prepare: { var cmd = new JavaScriptCommand(); cmd.description = "updating " + output.fileName; cmd.sourceCode = function() { File.copy(input.filePath, output.filePath); }; return [cmd]; } } } (If the includes are not nested, then probably *all* of the source scripts should be includes and the actual script would really be auto-generated using INCLUDE statements.) Christian _______________________________________________ Qbs mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/qbs
