Hi Christian, Thanks for the answer but I do not understand it. Of course I see that cpp module is handling a precompile header since i'm using the cpp.cxxPrecompiledHeader in my example. But except if I missed something this property if of path type so that you can specify only one file containing the list of headers you want to be precompiled in a format like
#if defined __cplusplus #include "myfirstfile.h" #include "mysecondfile.h" #endif If you look at my rule, what I want is to automatically generate this file (as a precompilation rules) from a filetag "pch" . This enable to defines group of files that can be precompiled in a simpler and more efficient way. Regards Olivier > On 05/21/2014 12:08 AM, olivier musse wrote: >> Hi, >> >> I want to create a module to automatically create and compile a pre >> compile header file in my project >> For that I create the following module > Why? The cpp module supports this already; see > http://qt-project.org/doc/qbs-1.2/cpp-module.html#precompiledheader. If > you are interested in the implementation, you can find it under > share/qbs/modules/cpp/ in the qbs sources. > > > Christian > > >> ----- generatePCH.qbs >> importqbs >> >> import qbs.TextFile >> >> import qbs.FileInfo >> >> Module { >> >> Rule { >> >> inputs: [' > '] >> multiplex:true >> >> Artifact { >> >> fileName: "pch_headers.h" >> >> fileTags: [ "hpp" ] >> >> } >> >> prepare: { >> >> var cmd = new JavaScriptCommand(); >> >> cmd.description = "generating precompiled header file"; >> >> cmd.sourceCode = function() { >> >> var fileContent="#if defined __cplusplus\n"; >> >> for(var i in inputs.pch) >> >> { >> >> fileContent+="#include \"" >> +FileInfo.fileName(inputs.pch[i].filePath) + "\"\n"; >> >> } >> >> fileContent+="#endif" >> >> var file = new TextFile(output.filePath, >> TextFile.WriteOnly); >> >> file.truncate(); >> >> file.write(fileContent); >> >> file.close(); >> >> } >> >> return cmd; >> >> } >> >> } >> >> Depends { name : "cpp"} >> >> cpp.cxxPrecompiledHeader:product.buildDirectory+"/pch_headers.h" >> >> } >> >> And In my project I can simply call >> Depends { name : "generatePCH" } >> Group{ >> name:"PchHeaders" >> files:['commondefs.h','otherfile.h'] >> fileTags:['pch'] >> } >> >> >> I have some questions : >> 1) The file pch_headers.h is well generated on the build directory if in >> my PchHeaders Group I select files with extension other than .h . When >> I use .h extension, the pch_headers.h is not generated as if there are >> some interferences between the cpp module "hpp" tag and my "pch" tag. >> Does it may be the issue? Can I do something for it to work? >> 2) the line >> cpp.cxxPrecompiledHeader:product.buildDirectory+"/pch_headers.h" seem to >> have no effect when put in the Module. I try to put it directly in the >> product and then it warn me that the artifact is not in the list of >> source files. For the pch_headers.h to be pre compiled, I need to put it >> manually in the source directory and add to project >> Group{ >> files:[pch_headers.h]} >> cpp.cxxPrecompiledHeader:"pch_headers.h" >> >> In that case it compiled but as soon as i'm trying to use the generated >> pch_headers.h located in build directory it does nothing. >> >> Am I doing something wrong? >> >> Many thanks for help >> >> Regards >> >> >> >> >> _______________________________________________ >> QBS mailing list >> QBS@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/qbs >> > _______________________________________________ > QBS mailing list > QBS@qt-project.org > http://lists.qt-project.org/mailman/listinfo/qbs > _______________________________________________ QBS mailing list QBS@qt-project.org http://lists.qt-project.org/mailman/listinfo/qbs