<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Hi Sebastian,
<div class=""><br class="">
</div>
<div class="">You need to give the output artifact of your Rule the cpp file tag in order it to be recognized as a C++ source file. The outputFileTags property only indicates the
<i class="">potential</i> set of file tags that artifacts in the outputArtifacts script may contain (for more complex Rules where the list of artifacts may vary, the distinction is necessary); you still have to explicitly state which file tags each Artifact
 has. You can also use output.filePath in your prepare script instead of repeating the value of your Artifact's filePath literally. For example:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class="">
<div class="">
<div class=""><font face="Courier New" class="">import qbs</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">import qbs.FileInfo</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">AucosDynamicLibrary {</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   name: "subcore"</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   Depends { name: "core" }</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   files: [</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       "*.db",</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       "*.cpp",</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       "*.h"</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   ]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   FileTagger {</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       patterns: ["*.db"]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       fileTags: ["db"]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   }</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   Rule {</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       inputs: ["db"]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class=""><br class="">
</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       outputArtifacts: [{filePath: FileInfo.baseName(input.filePath) + ".txt", fileTags: ["cpp"]}]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       outputFileTags: ["cpp"]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class=""><br class="">
</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       // Instead of outputArtifacts and outputFileTags, you could also use the following, since there is only one output Artifact:</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       /*Artifact {</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           filePath: FileInfo.baseName(input.filePath) + ".txt"</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           fileTags: ["cpp"]</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       }*/</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class=""><br class="">
</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       prepare: {</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           var awk = "awk"</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           var awkScript = project.path + "/../utils/sql/db2c++.awk";</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           var args = ["-f ", awkScript, "-v", "prifile=" + output.filePath, input.filePath];</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           var cmd = new Command(awk, args);</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           cmd.workingDirectory = product.buildDirectory;</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           cmd.description = "generating C++ source";</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">           return cmd;</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">       }</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   }</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class=""><br class="">
</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">   Export { Depends { name: "core" } }</font></div>
</div>
<div class="">
<div class=""><font face="Courier New" class="">}</font></div>
</div>
</blockquote>
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On May 18, 2016, at 12:33 AM, Sebastian Stadelmann <<a href="mailto:s.stadelmann@aucos.de" class="">s.stadelmann@aucos.de</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">Hi,<br class="">
<br class="">
in our project we need to generates several „*.cpp“ and „*.h“ files from one input file ("*.db“).<br class="">
In the input file we define a database table structure for multiple tables and generate one cpp class<br class="">
for each table definition.<br class="">
The name of the generated cpp files is not known before we start the code generator because the name<br class="">
was defined in the input file.<br class="">
Ex.: input: customer.db<br class="">
output: parts.h, parts.cpp, orders.h, orders.cpp …<br class="">
We also generate a text file with a list of all generated files. This text file has a defined name.<br class="">
<br class="">
Is there a way to compile all generated files in the current product after running the code generator by appending the files from the<br class="">
generated text file to the product files? Or do you have any other suggestions?<br class="">
<br class="">
Any help would be appreciated.<br class="">
<br class="">
Thanks<br class="">
Sebastian<br class="">
<br class="">
import qbs<br class="">
import qbs.FileInfo<br class="">
AucosDynamicLibrary {<br class="">
   name: "subcore"<br class="">
   Depends { name: "core" }<br class="">
   files: [<br class="">
       "*.db",<br class="">
       "*.cpp",<br class="">
       "*.h"<br class="">
   ]<br class="">
   FileTagger {<br class="">
       patterns: ["*.db"]<br class="">
       fileTags: ["db"]<br class="">
   }<br class="">
   Rule {<br class="">
       inputs: ["db"]<br class="">
       outputArtifacts: [{filePath: FileInfo.baseName(input.filePath)+".txt"}]<br class="">
       outputFileTags: ["cpp"]<br class="">
<br class="">
       prepare: {<br class="">
           var awk = "awk"<br class="">
           var awkScript = project.path + "/../utils/sql/db2c++.awk";<br class="">
           var args = ["-f ", awkScript, "-v", "prifile="+FileInfo.baseName(input.filePath)+".txt",  input.filePath];<br class="">
           var cmd = new Command(awk, args);<br class="">
           cmd.workingDirectory = product.buildDirectory;<br class="">
           cmd.description = "generating C++ source";<br class="">
           return cmd;<br class="">
       }<br class="">
   }<br class="">
<br class="">
   Export { Depends { name: "core" } }<br class="">
}<br class="">
<br class="">
<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
QBS mailing list<br class="">
<a href="mailto:QBS@qt-project.org" class="">QBS@qt-project.org</a><br class="">
http://lists.qt-project.org/mailman/listinfo/qbs<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
<div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
-- <br class="">
Jake Petroules - <a href="mailto:jake.petroules@theqtcompany.com" class="">jake.petroules@theqtcompany.com</a><br class="">
Consulting Services Engineer - The Qt Company</div>
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Qbs build system evangelist - <a href="http://qbs.io" class="">qbs.io</a></div>
</div>
</div>
</div>
</div>
<br class="">
</div>
</body>
</html>