Re: 回复: "Defer to SCons to b uild build\__cpp_path.txt"
Bill Deegan <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CAEyG4CE88+Aq_2shHe2_v2ozc8iWjOnLek_=mwGuTZzVEpbc0A@mail.gmail.com> |
Try sorting the return value from glob.glob(), glob()'s item ordering are not always stable On Thu, Apr 28, 2022 at 1:16 PM liruncong2018 via Scons-users < [email protected]> wrote: > Hello Daniel Moody, > Attached is the build.ninja file generated by executing the scons command > twice, there are indeed differences. > Below I extract the first difference: > <<< first > build $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialogUi.autogen.h > $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialogUi.autogen.cpp: > $ > GENERATED_CMD | $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialog_Ui.py > >>> > <<< second > build $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialogUi.autogen.cpp > $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialogUi.autogen.h: > $ > GENERATED_CMD | $ > > D$:\work\current\master\knd\libs\CncSys\K2000PRJ\DataItems\DataItemApiwInputDialog_Ui.py > >>> > > You can see that "autogen.cpp" and "autogen.h" are in different order. > > The relevant generation scripts for these two files(cppFile, hFile) are as > follows: > <<< > UiPyFiles = glob.glob(cwd + "/**/*_Ui.py", recursive=True) > for f in UiPyFiles: > (filePath, fileName) = os.path.split(f) > pyModuleName = fileName[:-6] > cppFile = f[:-6] + "Ui.autogen.cpp" > hFile = cppFile[:-4] + ".h" > Env.Command( > [cppFile, hFile], > [f], > [ > '''@cd ${SOURCE.dir} && @%s -c "import > sys;sys.path.insert(0, '%s');sys.path.insert(0, '%s');from %s import %s; > %s.render();"''' % (sys.executable, os.path.join(rtconfig.KND_ROOT, > "tools", "python").replace("\\", "/"), filePath.replace("\\", "/"), > fileName[:-3], pyModuleName, pyModuleName), > "@echo Create file: %s, %s" % (cppFile, hFile) > ] > ) > path = os.path.relpath(cppFile, cwd) > obj = Env.Object(target = path[:-4] + ".o", source = cppFile) > autogenObjs += obj > >>> > > You can see that the target order in env.Command is consistent with the > order in the second build.ninja. > > ------------------ 原始邮件 ------------------ > *发件人:* "Daniel Moody" <[email protected]>; > *发送时间:* 2022年4月27日(星期三) 晚上11:36 > *收件人:* "liruncong2018"<[email protected]>;"SCons users mailing list"< > [email protected]>; > *主题:* Re: [Scons-users] "Defer to SCons to build build\__cpp_path.txt" > > Hello Liruncong, > > I could not reproduce your case in a simple test. I think your build is > creating some differences each time scons is run. The ninja tool will > regenerate the ninja file if there are any differences from the previous > ninja file, for example even if the command line options for some > compilation are the same but in a different order. In that case all things > which ninja will defer to scons to build, must be rebuilt. SCons however > may determine for those items that they do not need to be rebuilt > because the inputs (the CPPPATH string) have not changed. > > I pushed an update to the ninja_integration_branch which prints an > additional message if scons decided to regenerate the file. If it decides > to regenerate the build.ninja file you should see a message like: > > Generated new build.ninja! > > If scons decided not to regenerate the ninja file because there were no > changes you should see: > > No updates detected, build.ninja not regenerated. > > If you see the ninja file is being regenerated each time, please make a > copy of the build.ninja file, then run again and compare the original copy > to the newly generated ninja file. You can send me both copies so I can see > if for some reason scons is causing the unexpected regeneration. > > On Wed, Apr 27, 2022 at 7:16 AM liruncong2018 <[email protected]> > wrote: > >> Hi, >> After successful compilation, select a file and add a blank line, then >> execute the following two commands in sequence: >> 1) run_ninja_env.bat -d explain build\__cpp_path.txt >> 2) scons -j%NUMBER_OF_PROCESSORS% --experimental=ninja >> The attachment is the execution result of the above two commands. >> The following output from the log record should be removed: >> ··· >> [2/2518] Defer to SCons to build build\__link_objects.txt [2K >> [3/2518] Defer to SCons to build build\__exe_cpp_path.txt [2K >> [4/2518] Defer to SCons to build build\__cpp_path.txt [2K >> [5/2518] Defer to SCons to build build\__define_options.txt [2K >> ··· >> From the file time point of view, the 4 txt files have not been >> recompiled, so there should be no output information. >> >> ------------------ 原始邮件 ------------------ >> *发件人:* "Daniel Moody" <[email protected]>; >> *发送时间:* 2022年4月27日(星期三) 凌晨2:51 >> *收件人:* "SCons users mailing list"<[email protected]>; >> *抄送:* "liruncong2018"<[email protected]>; >> *主题:* Re: [Scons-users] "Defer to SCons to build build\__cpp_path.txt" >> >> It depends on the specific files in question and their dependencies. >> Looking at the most recent build.ninja you sent, these files only depend on >> the scons build (they are from the Textfile builder, so then in the scons >> build, the only dependency is the source string, which is generated from >> CPPPATH in the SConscripts files). >> >> I would like to know why ninja decided to rebuild these files if they are >> already built. After this issue is occurring, then run this command >> >> run_ninja_env.bat -d explain build\__cpp_path.txt >> >> And ninja should say why it is attempting to rebuild the file. Please >> send me the output as well. >> >> On Tue, Apr 26, 2022, 8:18 AM liruncong2018 via Scons-users < >> [email protected]> wrote: >> >>> Hi, >>>> >>>> When there are file errors that are not corrected, the following lines >>>>> always appear when compiling, but the file time has not changed, indicating >>>>> that the file has not been regenerated. >>>> >>>> Is it possible not to display this information if the file is not >>>>> regenerated? Otherwise, users will think these files have been updated. >>>> >>>> ··· >>>> >>>> [2/2518] Defer to SCons to build build\__cpp_path.txt [2K >>>>> >>>>> [3/2518] Defer to SCons to build build\__link_objects.txt [2K >>>>> >>>>> [4/2518] Defer to SCons to build build\__define_options.txt [2K >>>>> >>>>> ··· >>>>> >>>>> _______________________________________________ >>> Scons-users mailing list >>> [email protected] >>> https://pairlist4.pair.net/mailman/listinfo/scons-users >>> >> _______________________________________________ > Scons-users mailing list > [email protected] > https://pairlist4.pair.net/mailman/listinfo/scons-users > _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users