On 05/18/2016 09:33 AM, Sebastian Stadelmann wrote:
in our project we need to generates several „*.cpp“ and „*.h“ files from one input
file ("*.db“).
In the input file we define a database table structure for multiple tables and
generate one cpp class
for each table definition.
The name of the generated cpp files is not known before we start the code
generator because the name
was defined in the input file.
Ex.: input: customer.db
output: parts.h, parts.cpp, orders.h, orders.cpp …
We also generate a text file with a list of all generated files. This text file
has a defined name.
Is there a way to compile all generated files in the current product after
running the code generator by appending the files from the
generated text file to the product files? Or do you have any other suggestions?
Yes. You create a second rule. Its input is the generated text file. In
the outputArtifacts script of that rule you parse the text file and
create one artifact object per line. The command itself created by that
rule in its prepare script can be empty (as the files already exist).
That should be all.
import qbs
import qbs.FileInfo
AucosDynamicLibrary {
name: "subcore"
Depends { name: "core" }
files: [
"*.db",
"*.cpp",
"*.h"
]
FileTagger {
patterns: ["*.db"]
fileTags: ["db"]
}
Rule {
inputs: ["db"]
outputArtifacts: [{filePath: FileInfo.baseName(input.filePath)+".txt"}]
outputFileTags: ["cpp"]
Unless I completely misunderstood the problem, this file tag should not
be "cpp", but some custom tag that serves as an input to the second rule
mentioned above.
prepare: {
var awk = "awk"
var awkScript = project.path + "/../utils/sql/db2c++.awk";
var args = ["-f ", awkScript, "-v",
"prifile="+FileInfo.baseName(input.filePath)+".txt", input.filePath];
var cmd = new Command(awk, args);
cmd.workingDirectory = product.buildDirectory;
cmd.description = "generating C++ source";
return cmd;
}
}
Export { Depends { name: "core" } }
}
Christian
_______________________________________________
QBS mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qbs