Re: 回复: 回复: 回复: 回复: 回复: 回复: Ninja compil ation fails after using include path file instead of " -I" option
Daniel Moody <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CANws3JTYnOD5249MKKiQ953hsJNoETLQC0mHWZ8Tbx6UcUr59Q@mail.gmail.com> |
yes can you give the name of the cpp file and header file that were involved in the issue? On Fri, Apr 22, 2022 at 9:46 AM liruncong2018 <[email protected]> wrote: > Hi, > Does the modification of the .h recompile correctly with only scons > build? -- Yes. It can be determined that the problem occurs after ninja is > enabled. > Can you tell me which cpp file and what header file? Can you put your most > recent branch in github so I can inspect the files? -- I have tried to > reproduce the problem in a test project, but without success. > Do you have all the paths to your header files in the CPPPATH ? -- Yes. It > is normal when ninja is not enabled. > > I uploaded build.ninja, don't know if it helps in analysis. > ------------------ 原始邮件 ------------------ > *发件人:* "Bill Deegan" <[email protected]>; > *发送时间:* 2022年4月22日(星期五) 凌晨0:04 > *收件人:* "Daniel Moody"<[email protected]>; > *抄送:* "liruncong2018"<[email protected]>;"scons-users"< > [email protected]>; > *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation fails > after using include path file instead of "-I" option > > Do you have all the paths to your header files in the CPPPATH ? > > On Thu, Apr 21, 2022 at 4:42 PM Daniel Moody <[email protected]> wrote: > >> Does the modification of the .h recompile correctly with only scons >> build? Can you tell me which cpp file and what header file? Can you put >> your most recent branch in github so I can inspect the files? >> >> On Thu, Apr 21, 2022 at 8:52 AM liruncong2018 <[email protected]> >> wrote: >> >>> Hi, >>> Now after enabling the ninja function, if we modify the .cpp file, then >>> only this file will be compiled and then linked, which is correct. >>> But if the modification is a .h file, the source file containing the >>> file will not be compiled, and the compilation will take no action. >>> >>> ------------------ 原始邮件 ------------------ >>> *发件人:* "liruncong2018" <[email protected]>; >>> *发送时间:* 2022年4月21日(星期四) 中午11:48 >>> *收件人:* "Daniel Moody"<[email protected]>; >>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>> [email protected]>; >>> *主题:* 回复: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation fails >>> after using include path file instead of "-I" option >>> >>> Hello Daniel Moody, >>> >>> Solved, thanks!!! >>> >>> >>> ------------------ 原始邮件 ------------------ >>> *发件人:* "Daniel Moody" <[email protected]>; >>> *发送时间:* 2022年4月21日(星期四) 上午10:41 >>> *收件人:* "liruncong2018"<[email protected]>; >>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>> [email protected]>; >>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation fails >>> after using include path file instead of "-I" option >>> >>> Hello liruncong, >>> >>> I will briefly explain scanners in your situation. >>> >>> Every builder (ex. Object, SharedObject, Program, SharedLibrary, >>> Textfile) has a target_scanner and source_scanner attribute. This attribute >>> is the scanner which should run to find dependencies for either the targets >>> or the sources, corresponding to target_scanner and source_scanner. >>> >>> The example scanner in your previous email is the scanner being applied >>> to the Object and SharedObject builders ( SCons.Tool.createObjBuilders(env) >>> will return these two builders). These builders are what do the >>> compilation (.c/.cpp -> .o), in this case the target will be the output .o >>> file from compilation so we are interested in the target_scanner. When you >>> apply this scanner to those Object and SharedObject builders, it will be >>> run for every separate compilation and return the list of dependencies that >>> should be built first before scons will proceed with that compilation. >>> linkObjsFile is a list of object files and you should not pass object files >>> to the compilation command. Therefore there is no reason .o files should >>> depend on this file because it should not be in the command line and >>> therefore it should not be in the scanner for object files. >>> >>> I have already said linkObjsFile does not belong in the scanner for >>> object files. linkObjsFile should be on the command line which is linking a >>> program or library binary and therefore should be in a scanner on the >>> Program, StaticLibrary or SharedLibrary builder. The Program builder >>> already has a target scanner it uses to find the library files which are >>> used on the command line, so therefore you can not simply overwrite the >>> existing scanner (unless you take care to replicate the existing logic in >>> your new scanner). You can chain the scanner, so that when your scanner is >>> called it calls the existing scanner, then adds some more dependencies to >>> the return list. I have sent you an example of how to chain the scanner in >>> your case for the Program builder. >>> >>> env.Depends is meant for special case use, because it deals with >>> specific nodes. Scanners are meant to determine dependencies for all cases >>> of building sources to targets. >>> >>> >>> >>> >>> On Wed, Apr 20, 2022 at 8:51 PM liruncong2018 <[email protected]> >>> wrote: >>> >>>> Hi, >>>> After adding linkObjsFile to the scanner, adding a .cpp file will cause >>>> the compilation of all files, not just the new file. linkObjsFile should >>>> only be added to the target's dependencies, how to change it? Compared with >>>> env.Depends, scanner is more difficult to understand. >>>> —————————————————————————————————————————————————————————— >>>> def _add_scanner(builder): >>>> def new_scanner(node, env, path): >>>> returndefineOptsFile + incPathsFile + exeIncPathsFile + >>>> linkObjsFile + env["_H_Files"] + [cPch] + [cppPch] >>>> >>>> builder.builder.target_scanner = SCons.Scanner.Scanner( >>>> function=new_scanner, >>>> path_function=[], >>>> ) >>>> forobject_builder in SCons.Tool.createObjBuilders(env): >>>> _add_scanner(object_builder) >>>> —————————————————————————————————————————————————————————— >>>> >>>> >>>> ------------------ 原始邮件 ------------------ >>>> *发件人:* "liruncong2018" <[email protected]>; >>>> *发送时间:* 2022年4月19日(星期二) 晚上11:16 >>>> *收件人:* "Daniel Moody"<[email protected]>; >>>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>>> [email protected]>; >>>> *主题:* 回复: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>> fails after using include path file instead of "-I" option >>>> >>>> Hello Daniel Moody, >>>> >>>> # Daniel Moody: This text file is only dependent on the string >>>> list, so only if the >>>> # objsList changes would the Textfile be regenerated >>>> At present, the sorted function is used to solve the problem that >>>> the obj list may be different each time, >>>> >>>> # Daniel Moody: Setting the LINKCOM or any of the COM variables >>>> directly is a very aggressive >>>> # approach and should not be used in most situations. >>>> # Instead you should add the new flags to LINKFLAGS like: >>>> # env.Append(LINKFLAGS=["--via=%s" % >>>> (linkObjsFile[0].path.replace("\\", "/"))]) >>>> This can't be changed, I need to remove $SOURCE from LINKCOM and >>>> replace it with --via=file. Is currently changed to: env["LINKCOM"] = >>>> "$LINK -o $TARGET $LINKFLAGS $__RPATH $_LIBDIRFLAGS $_LIBFLAGS --via=%s" % >>>> (linkObjsFile[0].path.replace("\\", "/")) >>>> >>>> # Daniel Moody: This scanner is for object files only, here I see the >>>> use of exeIncPathsFile and >>>> # linkObjsFile which I assume are not meant to be used with object file >>>> compile commands. I >>>> # think you will want to make a scanner for the Program Builder. The >>>> program builder already has >>>> # a scanner so you will need to chain the scanners like this: >>>> # >>>> # def new_program_scanner(node, env, path, argument): >>>> # dependencies = argument(node, env, path) >>>> # dependencies += exeIncPathsFile + linkObjsFile >>>> # return dependencies >>>> # env['BUILDERS']['Program'].target_scanner = SCons.Scanner.Scanner( >>>> # function=new_program_scanner, >>>> # >>>> path_function=env['BUILDERS']['Program'].target_scanner.path_function, >>>> # argument=env['BUILDERS']['Program'].target_scanner >>>> # ) >>>> I still don't quite understand this, I may have to check the scons >>>> manual. >>>> >>>> # Daniel Moody: I think you are trying to create dependencies by >>>> passing the response files as a source here? >>>> # I think instead you should use the scanner I recommended in the above >>>> comment. >>>> # also I do not know what rtconfig.TARGET is or why it needs to depend >>>> on the exeTarget >>>> rtconfig.TARGET and exeTarget are actually two separate targets, but >>>> they share some files. exeTarget is relatively simple, compiling directly >>>> from .cpp file to .exe file (compiling and linking with one command), >>>> avoiding the need to prepare an additional environment. >>>> I don't understand the new_program_scanner above, and I don't know how >>>> to change it for the time being. However, the last env.Depends does not >>>> seem to affect the ninja function, at least the current test results. >>>> >>>> >>>> Hello, >>>> After the update, there is no problem with the ninja function for the >>>> time being.Thanks! >>>> >>>> Hello, >>>> After I updated, the behavior of enabling ninja and not enabling ninja >>>> is now consistent, that is, recompiling every time. This is a problem >>>> caused by linkObjsFile being created every time, I need to solve this >>>> problem first, and then continue to test down. >>>> >>>> >>>> ------------------ 原始邮件 ------------------ >>>> *发件人:* "Daniel Moody" <[email protected]>; >>>> *发送时间:* 2022年4月19日(星期二) 凌晨4:05 >>>> *收件人:* "liruncong2018"<[email protected]>; >>>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>>> [email protected]>; >>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>> fails after using include path file instead of "-I" option >>>> >>>> If you use the "generate-ninja" command line target does it execute >>>> run_ninja_env.bat? >>>> >>>> I pushed another update to the branch if you could try the latest? >>>> >>>> On Mon, Apr 18, 2022 at 10:59 AM liruncong2018 <[email protected]> >>>> wrote: >>>> >>>>> Hello, >>>>> After the update, the phenomenon is exactly the same, the modified >>>>> file is still not compiled, and the scons still does not call >>>>> run_ninja_env.bat. >>>>> >>>>> I haven't had time to confirm your suggestions later, I'll take a look >>>>> tomorrow night, thanks! >>>>> >>>>> ------------------ 原始邮件 ------------------ >>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>> *发送时间:* 2022年4月18日(星期一) 晚上11:09 >>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>>>> [email protected]>; >>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>> fails after using include path file instead of "-I" option >>>>> >>>>> Hello, >>>>> >>>>> Thanks for reporting the issue from ninja, I have updated the branch >>>>> with a small fix for that case. >>>>> >>>>> Regarding the scons issues, I added comments inline about the code and >>>>> some of the issues I see: >>>>> >>>>> compileIncPath = os.path.normpath(os.path.join(rtconfig.EXEC_PATH, >>>>> "..", "include")) >>>>> cppPathList = [os.path.join(compileIncPath, "libcxx"), >>>>> compileIncPath] + env["CPPPATH"] >>>>> cppPathStr = "-I" + "\n-I".join(cppPathList).replace("\\", "/") >>>>> incPathsFile = env.Textfile( >>>>> "build/__cpp_path.txt", >>>>> cppPathStr >>>>> ) >>>>> env["_CPPINCFLAGS"] = "@%s" % (incPathsFile[0].path.replace("\\", "/" >>>>> )) >>>>> >>>>> exeIncPath = [] >>>>> for p in env["CPPPATH"]: >>>>> p = p.replace("\\", "/") >>>>> if p.find("compilers") == -1 and not re.search('components/net', >>>>> p): >>>>> exeIncPath += [p] >>>>> >>>>> exeCppPathStr = "-I" + "\n-I".join(exeIncPath).replace("\\", "/") >>>>> exeIncPathsFile = env.Textfile( >>>>> "build/__exe_cpp_path.txt", >>>>> exeCppPathStr >>>>> ) >>>>> env["_ExeIncPathsFile"] = exeIncPathsFile[0].path.replace("\\", "/") >>>>> >>>>> objsList = [] >>>>> for obj in objs: >>>>> (fileName, ext) = os.path.splitext(obj.path) >>>>> if ext in env["CPPSUFFIXES"] or ext == ".o": >>>>> objsList += [fileName.replace("\\", "/") + ".o"]; >>>>> # Daniel Moody: This text file is only dependent on the string >>>>> list, so only if the >>>>> # objsList changes would the Textfile be regenerated >>>>> linkObjsFile = env.Textfile( >>>>> "build/__link_objects.txt", >>>>> "\n".join(objsList) >>>>> ) >>>>> # Daniel Moody: Setting the LINKCOM or any of the COM variables >>>>> directly is a very aggressive >>>>> # approach and should not be used in most situations. >>>>> # Instead you should add the new flags to LINKFLAGS like: >>>>> # env.Append(LINKFLAGS=["--via=%s" % >>>>> (linkObjsFile[0].path.replace("\\", "/"))]) >>>>> env["LINKCOM"] = "$LINK -o $TARGET $LINKFLAGS --via=%s" % >>>>> (linkObjsFile[0].path.replace("\\", "/")) >>>>> >>>>> defineOptsFile = env.Textfile( >>>>> "build/__define_options.txt", >>>>> "\n".join(rtconfig.rtconfigObj.DefineOptions) >>>>> ) >>>>> >>>>> incFile = os.path.join(rtconfig.KND_ROOT, "include", "basicdef.h") >>>>> cPch = os.path.join(rtconfig.BSP_ROOT, "build", os.path.basename(incFile)) >>>>> + ".c.pch" >>>>> cppPch = os.path.join(rtconfig.BSP_ROOT, "build", os.path.basename(incFile)) >>>>> + ".cpp.pch" >>>>> >>>>> env.Command( >>>>> cPch, >>>>> [incFile, incPathsFile, defineOptsFile], >>>>> ["$CXX -x c-header ${SOURCES[0]} -o $TARGET $CCFLAGS $CFLAGS >>>>> $_CPPINCFLAGS @$_DefineOptsFile"] >>>>> ) >>>>> >>>>> env.Command( >>>>> cppPch, >>>>> [incFile, incPathsFile, defineOptsFile], >>>>> ["$CXX -x c++-header ${SOURCES[0]} -o $TARGET $CCFLAGS $CXXFLAGS >>>>> $_CPPINCFLAGS @$_DefineOptsFile"] >>>>> ) >>>>> >>>>> env["_C_INC_FLAG"] = "-include %s" % (incFile) >>>>> env["_CXX_INC_FLAG"] = "-include %s" % (incFile) >>>>> env["_C_PCH_FLAG"] = "-include-pch %s" % (cPch) >>>>> env["_CXX_PCH_FLAG"] = "-include-pch %s" % (cppPch) >>>>> >>>>> # Daniel Moody: This scanner is for object files only, here I see the >>>>> use of exeIncPathsFile and >>>>> # linkObjsFile which I assume are not meant to be used with object >>>>> file compile commands. I >>>>> # think you will want to make a scanner for the Program Builder. The >>>>> program builder already has >>>>> # a scanner so you will need to chain the scanners like this: >>>>> # >>>>> # def new_program_scanner(node, env, path, argument): >>>>> # dependencies = argument(node, env, path) >>>>> # dependencies += exeIncPathsFile + linkObjsFile >>>>> # return dependencies >>>>> >>>>> # env['BUILDERS']['Program'].target_scanner = SCons.Scanner.Scanner( >>>>> # function=new_program_scanner, >>>>> # >>>>> path_function=env['BUILDERS']['Program'].target_scanner.path_function, >>>>> # argument=env['BUILDERS']['Program'].target_scanner >>>>> # ) >>>>> def _add_scanner(builder): >>>>> def new_scanner(node, env, path): >>>>> return defineOptsFile + incPathsFile + exeIncPathsFile + >>>>> linkObjsFile + env["_H_Files"] + [cPch] + [cppPch] >>>>> >>>>> builder.builder.target_scanner = SCons.Scanner.Scanner( >>>>> function=new_scanner, >>>>> path_function=[], >>>>> ) >>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>> _add_scanner(object_builder) >>>>> >>>>> env["_DefineOptsFile"] = defineOptsFile >>>>> env["CCCOM"] += " $_C_INC_FLAG $_C_PCH_FLAG @$_DefineOptsFile" >>>>> env["CXXCOM"] += " $_CXX_INC_FLAG $_CXX_PCH_FLAG @$_DefineOptsFile" >>>>> >>>>> opts = [ >>>>> "-Wno-invalid-source-encoding", >>>>> "-Wno-invalid-offsetof", >>>>> "-Wformat", >>>>> "-Wuninitialized", >>>>> "-Wfloat-conversion", >>>>> "-Wno-unused-variable", >>>>> "-Wno-int-to-void-pointer-cast", >>>>> "-Wno-deprecated-declarations", >>>>> "-Wno-int-to-pointer-cast", >>>>> "-std=gnu++17", >>>>> "-Wno-c++2a-extensions", # Synonym for -Wno-c++20-extensions. >>>>> "-Wno-gnu-string-literal-operator-template", # string literal >>>>> operator templates are a GNU extension >>>>> "-D__MSVC_INLINE_ASM=", >>>>> "-DWIN32" >>>>> ] >>>>> # Daniel Moody: I think you are trying to create dependencies by >>>>> passing the response files as a source here? >>>>> # I think instead you should use the scanner I recommended in the >>>>> above comment. >>>>> # also I do not know what rtconfig.TARGET is or why it needs to depend >>>>> on the exeTarget >>>>> for exeTarget, srcList in env["_ExeTarget"]: >>>>> env.Command( >>>>> exeTarget, >>>>> [srcList, exeIncPathsFile, defineOptsFile], >>>>> [ >>>>> "clang++.exe -o $TARGET ${SOURCES[0]} @$_ExeIncPathsFile >>>>> $_CXX_INC_FLAG @$_DefineOptsFile %s" % (" ".join(opts)) >>>>> ] >>>>> ) >>>>> env.Depends(rtconfig.TARGET, exeTarget) >>>>> >>>>> On Mon, Apr 18, 2022 at 8:26 AM liruncong2018 <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi, >>>>>> I get the following error after compiling with branch: " >>>>>> https://github.com/dmoody256/scons/tree/ninja_integration_branch" >>>>>> ··· >>>>>> ninja: error: >>>>>> D:\work\current\master\bsp\am335x-knd\apps\cnc\build.ninja:268806: unknown >>>>>> target 'D' >>>>>> default >>>>>> D:\work\current\master\knd\libs\CncSys\K2000PRJ\LimitTime\LimitT... >>>>>> ^ near here >>>>>> scons: *** [build.ninja] CalledProcessError : Command 'ninja' >>>>>> returned non-zero exit status 1.[error] >>>>>> Traceback (most recent call last): >>>>>> ··· >>>>>> "D:\work\current\***" should it be "D$:\work\current\***" ? >>>>>> >>>>>> In addition, I found that when ninja is not enabled, scons will all >>>>>> be recompiled when compiled again, which is equivalent to the first >>>>>> compilation. >>>>>> From the log, "__link_objects.txt" is generated again, which will >>>>>> cause all to be recompiled. >>>>>> Below is my code for this part, I don't know if there is a problem. >>>>>> At the same time, the last env.Depends inside I don't know how to use >>>>>> scanner instead? >>>>>> ··· >>>>>> compileIncPath = >>>>>> os.path.normpath(os.path.join(rtconfig.EXEC_PATH, "..", "include")) >>>>>> cppPathList = [os.path.join(compileIncPath, "libcxx"), >>>>>> compileIncPath] + env["CPPPATH"] >>>>>> cppPathStr = "-I" + "\n-I".join(cppPathList).replace("\\", "/") >>>>>> incPathsFile = env.Textfile( >>>>>> "build/__cpp_path.txt", >>>>>> cppPathStr >>>>>> ) >>>>>> env["_CPPINCFLAGS"] = "@%s" % (incPathsFile[0].path.replace("\\", >>>>>> "/")) >>>>>> >>>>>> exeIncPath = [] >>>>>> for p in env["CPPPATH"]: >>>>>> p = p.replace("\\", "/") >>>>>> if p.find("compilers") == -1 and not >>>>>> re.search('components/net', p): >>>>>> exeIncPath += [p] >>>>>> >>>>>> exeCppPathStr = "-I" + "\n-I".join(exeIncPath).replace("\\", "/") >>>>>> exeIncPathsFile = env.Textfile( >>>>>> "build/__exe_cpp_path.txt", >>>>>> exeCppPathStr >>>>>> ) >>>>>> env["_ExeIncPathsFile"] = exeIncPathsFile[0].path.replace("\\", >>>>>> "/") >>>>>> >>>>>> objsList = [] >>>>>> for obj in objs: >>>>>> (fileName, ext) = os.path.splitext(obj.path) >>>>>> if ext in env["CPPSUFFIXES"] or ext == ".o": >>>>>> objsList += [fileName.replace("\\", "/") + ".o"]; >>>>>> linkObjsFile = env.Textfile( >>>>>> "build/__link_objects.txt", >>>>>> "\n".join(objsList) >>>>>> ) >>>>>> env["LINKCOM"] = "$LINK -o $TARGET $LINKFLAGS --via=%s" % >>>>>> (linkObjsFile[0].path.replace("\\", "/")) >>>>>> >>>>>> defineOptsFile = env.Textfile( >>>>>> "build/__define_options.txt", >>>>>> "\n".join(rtconfig.rtconfigObj.DefineOptions) >>>>>> ) >>>>>> >>>>>> incFile = os.path.join(rtconfig.KND_ROOT, "include", "basicdef.h") >>>>>> cPch = os.path.join(rtconfig.BSP_ROOT, "build", >>>>>> os.path.basename(incFile)) + ".c.pch" >>>>>> cppPch = os.path.join(rtconfig.BSP_ROOT, "build", >>>>>> os.path.basename(incFile)) + ".cpp.pch" >>>>>> >>>>>> env.Command( >>>>>> cPch, >>>>>> [incFile, incPathsFile, defineOptsFile], >>>>>> ["$CXX -x c-header ${SOURCES[0]} -o $TARGET $CCFLAGS $CFLAGS >>>>>> $_CPPINCFLAGS @$_DefineOptsFile"] >>>>>> ) >>>>>> >>>>>> env.Command( >>>>>> cppPch, >>>>>> [incFile, incPathsFile, defineOptsFile], >>>>>> ["$CXX -x c++-header ${SOURCES[0]} -o $TARGET $CCFLAGS >>>>>> $CXXFLAGS $_CPPINCFLAGS @$_DefineOptsFile"] >>>>>> ) >>>>>> >>>>>> env["_C_INC_FLAG"] = "-include %s" % (incFile) >>>>>> env["_CXX_INC_FLAG"] = "-include %s" % (incFile) >>>>>> env["_C_PCH_FLAG"] = "-include-pch %s" % (cPch) >>>>>> env["_CXX_PCH_FLAG"] = "-include-pch %s" % (cppPch) >>>>>> >>>>>> def _add_scanner(builder): >>>>>> def new_scanner(node, env, path): >>>>>> return defineOptsFile + incPathsFile + exeIncPathsFile + >>>>>> linkObjsFile + env["_H_Files"] + [cPch] + [cppPch] >>>>>> >>>>>> builder.builder.target_scanner = SCons.Scanner.Scanner( >>>>>> function=new_scanner, >>>>>> path_function=[], >>>>>> ) >>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>> _add_scanner(object_builder) >>>>>> >>>>>> env["_DefineOptsFile"] = defineOptsFile >>>>>> env["CCCOM"] += " $_C_INC_FLAG $_C_PCH_FLAG @$_DefineOptsFile" >>>>>> env["CXXCOM"] += " $_CXX_INC_FLAG $_CXX_PCH_FLAG >>>>>> @$_DefineOptsFile" >>>>>> >>>>>> opts = [ >>>>>> "-Wno-invalid-source-encoding", >>>>>> "-Wno-invalid-offsetof", >>>>>> "-Wformat", >>>>>> "-Wuninitialized", >>>>>> "-Wfloat-conversion", >>>>>> "-Wno-unused-variable", >>>>>> "-Wno-int-to-void-pointer-cast", >>>>>> "-Wno-deprecated-declarations", >>>>>> "-Wno-int-to-pointer-cast", >>>>>> "-std=gnu++17", >>>>>> "-Wno-c++2a-extensions", # Synonym for -Wno-c++20-extensions. >>>>>> "-Wno-gnu-string-literal-operator-template", # string literal >>>>>> operator templates are a GNU extension >>>>>> "-D__MSVC_INLINE_ASM=", >>>>>> "-DWIN32" >>>>>> ] >>>>>> for exeTarget, srcList in env["_ExeTarget"]: >>>>>> env.Command( >>>>>> exeTarget, >>>>>> [srcList, exeIncPathsFile, defineOptsFile], >>>>>> [ >>>>>> "clang++.exe -o $TARGET ${SOURCES[0]} >>>>>> @$_ExeIncPathsFile $_CXX_INC_FLAG @$_DefineOptsFile %s" % (" ".join(opts)) >>>>>> ] >>>>>> ) >>>>>> env.Depends(rtconfig.TARGET, exeTarget) >>>>>> ··· >>>>>> >>>>>> ------------------ 原始邮件 ------------------ >>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>> *发送时间:* 2022年4月18日(星期一) 下午3:36 >>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>> *抄送:* "Bill Deegan"<[email protected]>;"scons-users"< >>>>>> [email protected]>; >>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>>> fails after using include path file instead of "-I" option >>>>>> >>>>>> Hello liruncong, >>>>>> >>>>>> I have a test branch for the issues you described where re-running >>>>>> scons is not re-compiling, could you please try it out?: >>>>>> https://github.com/dmoody256/scons/tree/ninja_integration_branch >>>>>> >>>>>> On Sun, Apr 17, 2022 at 2:29 AM liruncong2018 <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> If execute the command "scons -j%NUMBER_OF_PROCESSORS% >>>>>>> generate-ninja --verbose --experimental=ninja", it will be completely >>>>>>> recompiled. >>>>>>> If execute the command again, then it will be completely recompiled. >>>>>>> Each time is equivalent to the first compilation. >>>>>>> >>>>>>> ------------------ 原始邮件 ------------------ >>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>> *发送时间:* 2022年4月17日(星期天) 中午1:52 >>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>> *抄送:* "Bill Deegan"<[email protected]>;"SCons users mailing >>>>>>> list"<[email protected]>; >>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>>>> fails after using include path file instead of "-I" option >>>>>>> >>>>>>> If you use the command line target 'generate-ninja' for the scons >>>>>>> command, does it still fail to build and execute ninja on the second run? >>>>>>> >>>>>>> >>>>>>> On Sat, Apr 16, 2022 at 10:36 PM liruncong2018 <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Great, looking forward to your PR! >>>>>>>> >>>>>>>> >>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>> *发送时间:* 2022年4月17日(星期天) 中午11:31 >>>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>>> *抄送:* "Bill Deegan"<[email protected]>;"SCons users >>>>>>>> mailing list"<[email protected]>; >>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>>>>> fails after using include path file instead of "-I" option >>>>>>>> >>>>>>>> Okay that indicates that scons is not deciding to build and execute >>>>>>>> the ninja file, probably because nothing has changed in the build scripts >>>>>>>> when you only change the source file. This is a bug, even if the ninja file >>>>>>>> is not regened, scons should execute it for you. I will make a PR for this >>>>>>>> issue. For now you will need to use the run_ninja_env.bat. >>>>>>>> >>>>>>>> >>>>>>>> On Sat, Apr 16, 2022 at 9:54 PM liruncong2018 <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> When I just execute run_ninja_env.bat, it shows compile error. It >>>>>>>>> seems that there is no problem with ninja, the problem should be that scons >>>>>>>>> does not call run_ninja_env.bat to execute. Now how do I diagnose this >>>>>>>>> problem with scons? >>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>> *发送时间:* 2022年4月17日(星期天) 上午10:28 >>>>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>>>> *抄送:* "Bill Deegan"<[email protected]>;"SCons users >>>>>>>>> mailing list"<[email protected]>; >>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>>>>>> fails after using include path file instead of "-I" option >>>>>>>>> >>>>>>>>> When I test with the repo https://github.com/liruncong/NinJaTest >>>>>>>>> for bsp/beaglebone build using the changes from here: >>>>>>>>> https://github.com/SCons/scons/pull/4133, and I put an 'a' in the >>>>>>>>> src/irq.c file, I see the file error when I rerun the build. >>>>>>>>> >>>>>>>>> Could you specify what file you changed? >>>>>>>>> >>>>>>>>> Also on subsequent runs, you can just run_ninja_env.bat, it will >>>>>>>>> skip scons regeneration, but if you want scons to regen it should work also. >>>>>>>>> >>>>>>>>> On Sat, Apr 16, 2022 at 8:46 PM liruncong2018 < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> After the first compilation is successful, modify the file, >>>>>>>>>> expect the compilation to fail, but compile again without error message. >>>>>>>>>> The following is the log after the command("scons >>>>>>>>>> -j%NUMBER_OF_PROCESSORS% --verbose --experimental=ninja") is executed: >>>>>>>>>> ______________________________________ >>>>>>>>>> scons: Reading SConscript files ... >>>>>>>>>> scons: done reading SConscript files. >>>>>>>>>> scons: Building targets ... >>>>>>>>>> scons: done building targets. >>>>>>>>>> ______________________________________ >>>>>>>>>> I have attached the compressed "build.ninja" file in the >>>>>>>>>> attachment. >>>>>>>>>> >>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>>> *发送时间:* 2022年4月17日(星期天) 凌晨1:53 >>>>>>>>>> *收件人:* "Bill Deegan"<[email protected]>; >>>>>>>>>> *抄送:* "SCons users mailing list"<[email protected] >>>>>>>>>> >;"liruncong2018"<[email protected]>; >>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: 回复: Ninja >>>>>>>>>> compilation fails after using include path file instead of "-I" option >>>>>>>>>> >>>>>>>>>> Also i realized that link_objects.txt is probably not meant for >>>>>>>>>> the object builders. I assume this file is intended for linking the >>>>>>>>>> libraries and programs? In that case you will want a scanner for those >>>>>>>>>> builders instead. Do you have error messages you can show, it should help >>>>>>>>>> to see what your issue is. >>>>>>>>>> >>>>>>>>>> On Sat, Apr 16, 2022, 10:58 AM Bill Deegan < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> try bzip'ing the ninja.build file. That should make it >>>>>>>>>>> considerably smaller. >>>>>>>>>>> >>>>>>>>>>> On Sat, Apr 16, 2022 at 4:37 PM liruncong2018 via Scons-users < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> Still the same problem. I want to send "build.ninja" as an >>>>>>>>>>>> attachment, but the email always bounces, what information can I print so I >>>>>>>>>>>> can find the problem? >>>>>>>>>>>> >>>>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>>>>> *发送时间:* 2022年4月16日(星期六) 凌晨0:29 >>>>>>>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>>>>>>> *抄送:* "SCons users mailing list"<[email protected]>; >>>>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: Ninja compilation >>>>>>>>>>>> fails after using include path file instead of "-I" option >>>>>>>>>>>> >>>>>>>>>>>> Here's the same code but better color scheme: >>>>>>>>>>>> >>>>>>>>>>>> incPathsFile = env.Textfile( >>>>>>>>>>>> "build/__cpp_path.txt", >>>>>>>>>>>> cppPathStr >>>>>>>>>>>> ) >>>>>>>>>>>> >>>>>>>>>>>> defineOptsFile = env.Textfile( >>>>>>>>>>>> "build/__define_options.txt", >>>>>>>>>>>> "\n".join(rtconfig.rtconfigObj.DefineOptions) >>>>>>>>>>>> ) >>>>>>>>>>>> >>>>>>>>>>>> linkObjsFile = env.Textfile( >>>>>>>>>>>> "build/__link_objects.txt", >>>>>>>>>>>> "\n".join(objsList) >>>>>>>>>>>> ) >>>>>>>>>>>> >>>>>>>>>>>> def _add_scanner(builder): >>>>>>>>>>>> def new_scanner(node, env, path): >>>>>>>>>>>> return incPathsFile + defineOptsFile + linkObjsFile >>>>>>>>>>>> >>>>>>>>>>>> builder.builder.target_scanner = SCons.Scanner.Scanner( >>>>>>>>>>>> function=new_scanner, >>>>>>>>>>>> path_function=[], >>>>>>>>>>>> ) >>>>>>>>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>>>>>>>> _add_scanner(object_builder) >>>>>>>>>>>> >>>>>>>>>>>> On Fri, Apr 15, 2022 at 10:50 AM Daniel Moody < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> hello liruncong, >>>>>>>>>>>>> >>>>>>>>>>>>> If you want to add multiple @file dependencies via the scanner >>>>>>>>>>>>> do them all in the same scanner. Like I said you can only apply one >>>>>>>>>>>>> scanner, so in this case you are overwriting each previous scanner. The >>>>>>>>>>>>> scanner should return a list of files in which to set dependencies for the >>>>>>>>>>>>> current node. >>>>>>>>>>>>> >>>>>>>>>>>>> The path function is not used in this case, and I just left >>>>>>>>>>>>> the CPPPATH from the default SourceFileScanner I copied the scanner code >>>>>>>>>>>>> from. It does have to be something besides None I believe though, or scons >>>>>>>>>>>>> won't scan. The correct way this should be used in this case is you should >>>>>>>>>>>>> place the @file in a known list of directories or just a single directory, >>>>>>>>>>>>> and then pass a list of directories or a list containing the single >>>>>>>>>>>>> directory, and the scanner should find the files by extension in the list >>>>>>>>>>>>> of directories. This is the fundamental working of scanners if you want to >>>>>>>>>>>>> read more: >>>>>>>>>>>>> https://scons.org/doc/production/HTML/scons-user/ch20.html, >>>>>>>>>>>>> however you could also use a dummy list if there is no dynamic component >>>>>>>>>>>>> here. >>>>>>>>>>>>> >>>>>>>>>>>>> Here is an updated example based on the new info you provided: >>>>>>>>>>>>> >>>>>>>>>>>>> incPathsFile = env.Textfile( >>>>>>>>>>>>> "build/__cpp_path.txt", >>>>>>>>>>>>> cppPathStr >>>>>>>>>>>>> ) >>>>>>>>>>>>> >>>>>>>>>>>>> defineOptsFile = env.Textfile( >>>>>>>>>>>>> "build/__define_options.txt", >>>>>>>>>>>>> "\n".join(rtconfig.rtconfigObj.DefineOptions) >>>>>>>>>>>>> ) >>>>>>>>>>>>> >>>>>>>>>>>>> linkObjsFile = env.Textfile( >>>>>>>>>>>>> "build/__link_objects.txt", >>>>>>>>>>>>> "\n".join(objsList) >>>>>>>>>>>>> ) >>>>>>>>>>>>> >>>>>>>>>>>>> def _add_scanner(builder): >>>>>>>>>>>>> def new_scanner(node, env, path): >>>>>>>>>>>>> return incPathsFile + defineOptsFile + linkObjsFile >>>>>>>>>>>>> >>>>>>>>>>>>> builder.builder.target_scanner = SCons.Scanner.Scanner( >>>>>>>>>>>>> function=new_scanner, >>>>>>>>>>>>> path_function=[], >>>>>>>>>>>>> ) >>>>>>>>>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>>>>>>>>> _add_scanner(object_builder) >>>>>>>>>>>>> >>>>>>>>>>>>> On Fri, Apr 15, 2022 at 9:58 AM liruncong2018 < >>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Can you give me more information? What source file? Does the >>>>>>>>>>>>>> compilation fail the first time? Does it recompile successfully with only >>>>>>>>>>>>>> scons building? Can you push your latest code so I can see it in your repo? >>>>>>>>>>>>>> -- I don't know how to reproduce this problem in the git test >>>>>>>>>>>>>> project, I will try to see if it can be reproduced. >>>>>>>>>>>>>> Also each builder can only hold one target or source scanner, >>>>>>>>>>>>>> but you can chain the scanner by calling other scanners from within the >>>>>>>>>>>>>> single scanner. Are you assigning multiple scanners to the same builder? >>>>>>>>>>>>>> -- The following are some scanners, I don't quite understand >>>>>>>>>>>>>> the path_function, especially the second parameter of the last scanner >>>>>>>>>>>>>> (linkObjsFile). >>>>>>>>>>>>>> ———————————————————————————————————————— >>>>>>>>>>>>>> incPathsFile = env.Textfile( >>>>>>>>>>>>>> "build/__cpp_path.txt", >>>>>>>>>>>>>> cppPathStr >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> def _add_scanner(builder): >>>>>>>>>>>>>> def new_scanner(node, env, path): >>>>>>>>>>>>>> return incPathsFile >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.builder.target_scanner = >>>>>>>>>>>>>> SCons.Scanner.Scanner( >>>>>>>>>>>>>> function=new_scanner, >>>>>>>>>>>>>> >>>>>>>>>>>>>> path_function=SCons.Script.FindPathDirs('CPPPATH'), >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>>>>>>>>>> _add_scanner(object_builder) >>>>>>>>>>>>>> >>>>>>>>>>>>>> defineOptsFile = env.Textfile( >>>>>>>>>>>>>> "build/__define_options.txt", >>>>>>>>>>>>>> "\n".join(rtconfig.rtconfigObj.DefineOptions) >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> >>>>>>>>>>>>>> def _add_scanner(builder): >>>>>>>>>>>>>> def new_scanner(node, env, path): >>>>>>>>>>>>>> return defineOptsFile >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.builder.target_scanner = >>>>>>>>>>>>>> SCons.Scanner.Scanner( >>>>>>>>>>>>>> function=new_scanner, >>>>>>>>>>>>>> >>>>>>>>>>>>>> path_function=SCons.Script.FindPathDirs('CPPPATH'), >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>>>>>>>>>> _add_scanner(object_builder) >>>>>>>>>>>>>> >>>>>>>>>>>>>> linkObjsFile = env.Textfile( >>>>>>>>>>>>>> "build/__link_objects.txt", >>>>>>>>>>>>>> "\n".join(objsList) >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> >>>>>>>>>>>>>> def _add_scanner(builder): >>>>>>>>>>>>>> def new_scanner(node, env, path): >>>>>>>>>>>>>> return linkObjsFile >>>>>>>>>>>>>> >>>>>>>>>>>>>> builder.builder.target_scanner = >>>>>>>>>>>>>> SCons.Scanner.Scanner( >>>>>>>>>>>>>> function=new_scanner, >>>>>>>>>>>>>> >>>>>>>>>>>>>> path_function=SCons.Script.FindPathDirs('LIBPATH'), >>>>>>>>>>>>>> ) >>>>>>>>>>>>>> for object_builder in SCons.Tool.createObjBuilders(env): >>>>>>>>>>>>>> _add_scanner(object_builder) >>>>>>>>>>>>>> ———————————————————————————————————————————————— >>>>>>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>>>>>>> *发送时间:* 2022年4月14日(星期四) 晚上11:36 >>>>>>>>>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>>>>>>>>> *抄送:* "SCons users mailing list"<[email protected]>; >>>>>>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: Ninja >>>>>>>>>>>>>> compilation fails after using include path file instead of "-I" option >>>>>>>>>>>>>> >>>>>>>>>>>>>> Can you give me more information? What source file? Does the >>>>>>>>>>>>>> compilation fail the first time? Does it recompile successfully with only >>>>>>>>>>>>>> scons building? Can you push your latest code so I can see it in your repo? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Also each builder can only hold one target or source >>>>>>>>>>>>>> scanner, but you can chain the scanner by calling other scanners from >>>>>>>>>>>>>> within the single scanner. Are you assigning multiple scanners to the same >>>>>>>>>>>>>> builder? >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Thu, Apr 14, 2022 at 10:17 AM liruncong2018 < >>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hello Daniel Moody, >>>>>>>>>>>>>>> Thanks a lot for the example you gave. According to your >>>>>>>>>>>>>>> example, I added 4 scanners, which can indeed be compiled and linked. >>>>>>>>>>>>>>> But when I edit the source file, I deliberately put "a" at >>>>>>>>>>>>>>> the end of the .cpp file and expect the compilation to fail. But when I >>>>>>>>>>>>>>> compile again, nothing compiles. >>>>>>>>>>>>>>> How to diagnose this problem? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>>>>>>>> *发送时间:* 2022年4月14日(星期四) 凌晨2:27 >>>>>>>>>>>>>>> *收件人:* "liruncong2018"<[email protected]>; >>>>>>>>>>>>>>> *抄送:* "SCons users mailing list"<[email protected]>; >>>>>>>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: Ninja >>>>>>>>>>>>>>> compilation fails after using include path file instead of "-I" option >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I added an example how to hook up the dependencies: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> https://github.com/liruncong/NinJaTest/pull/1/files >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, Apr 13, 2022 at 10:01 AM liruncong2018 < >>>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>> I generate some option files via env.Textfile >>>>>>>>>>>>>>>> ("build/__cpp_path.txt", "build/__define_options.txt", >>>>>>>>>>>>>>>> "build/__link_objects.txt", "build/__exe_cpp_path.txt") and make objs >>>>>>>>>>>>>>>> depend on corresponding files ,for example: >>>>>>>>>>>>>>>> env.Depends(objs, ["build/__cpp_path.txt", >>>>>>>>>>>>>>>> "build/__define_options.txt" ]) >>>>>>>>>>>>>>>> env.Depends(target, "build/__link_objects.txt") >>>>>>>>>>>>>>>> But after enabling ninja, these manually added dependencies >>>>>>>>>>>>>>>> are ignored, which causes ninja to fail to compile. >>>>>>>>>>>>>>>> How to deal with this? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>>>>>>>> *发件人:* "Daniel Moody" <[email protected]>; >>>>>>>>>>>>>>>> *发送时间:* 2022年4月13日(星期三) 凌晨0:02 >>>>>>>>>>>>>>>> *收件人:* "SCons users mailing list"<[email protected]>; >>>>>>>>>>>>>>>> *抄送:* "liruncong2018"<[email protected]>; >>>>>>>>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: 回复: Ninja >>>>>>>>>>>>>>>> compilation fails after using include path file instead of "-I" option >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hello, that PR is meant to support shared @file with ninja, >>>>>>>>>>>>>>>> not intended for any improvements to TEMPFILE. Please test without TEMPFILE. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Tue, Apr 12, 2022 at 10:52 AM liruncong2018 via >>>>>>>>>>>>>>>> Scons-users <[email protected]> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi >>>>>>>>>>>>>>>>> I tested "https://github.com/SCons/scons/pull/4133", >>>>>>>>>>>>>>>>> after enabling ningja, except for the link failure, .c/.cpp/.S are >>>>>>>>>>>>>>>>> successfully compiled into .o, the total time is 6:48 . >>>>>>>>>>>>>>>>> This time is much greater than the previous time of 3:45 >>>>>>>>>>>>>>>>> when ninja was not enabled and the option file was shared using @file. >>>>>>>>>>>>>>>>> After using TEMPFILE instead of @file, the compilation >>>>>>>>>>>>>>>>> time is basically doubled whether ninja is enabled or not. >>>>>>>>>>>>>>>>> The TEMPFILE function should be improved to use shared >>>>>>>>>>>>>>>>> files to prevent the creation of a large number of temporary files. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ------------------ 原始邮件 ------------------ >>>>>>>>>>>>>>>>> *发件人:* "SCons users mailing list" <[email protected]>; >>>>>>>>>>>>>>>>> *发送时间:* 2022年4月11日(星期一) 晚上11:43 >>>>>>>>>>>>>>>>> *收件人:* "SCons users mailing list"<[email protected]>; >>>>>>>>>>>>>>>>> *主题:* Re: [Scons-users] 回复: 回复: 回复: 回复: Ninja compilation >>>>>>>>>>>>>>>>> fails after using include path file instead of "-I" option >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I have a potential fix to the ninja tool so that it can >>>>>>>>>>>>>>>>> decide to use response files or not. This should allow you to use your own >>>>>>>>>>>>>>>>> shared response file. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://github.com/SCons/scons/pull/4133 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Mon, Apr 11, 2022 at 10:01 AM Mats Wichmann < >>>>>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On 4/11/22 08:57, liruncong2018 via Scons-users wrote: >>>>>>>>>>>>>>>>>> > Hi, >>>>>>>>>>>>>>>>>> > Even using msys2 does not solve all problems. The 32K >>>>>>>>>>>>>>>>>> limit solves my >>>>>>>>>>>>>>>>>> > compilation problems (.cpp -> .o) but not linking (.o >>>>>>>>>>>>>>>>>> -> target) because >>>>>>>>>>>>>>>>>> > the link command line has around 137K (about 2500 .o >>>>>>>>>>>>>>>>>> files). So >>>>>>>>>>>>>>>>>> > compilers such as gcc/clang/armclang will support >>>>>>>>>>>>>>>>>> "@file". >>>>>>>>>>>>>>>>>> > Currently, scons needs to set up Depends when using >>>>>>>>>>>>>>>>>> @file. This >>>>>>>>>>>>>>>>>> > dependency suggestion is still directly supported by >>>>>>>>>>>>>>>>>> scons, and users do >>>>>>>>>>>>>>>>>> > not need to write dependencies. It should also be >>>>>>>>>>>>>>>>>> supported when ninja >>>>>>>>>>>>>>>>>> > is enabled. >>>>>>>>>>>>>>>>>> > When LINKCOM uses "TEMPFILE", I get a link failure >>>>>>>>>>>>>>>>>> because armlink.exe >>>>>>>>>>>>>>>>>> > checks if --cpu is specified on the command line, so it >>>>>>>>>>>>>>>>>> is not >>>>>>>>>>>>>>>>>> > reasonable for "TEMPFILE" to put all options to a >>>>>>>>>>>>>>>>>> temporary file. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Right... thus my suggestion - well, let's call it >>>>>>>>>>>>>>>>>> "musing" rather than >>>>>>>>>>>>>>>>>> "suggestion" because this might not work at all: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> > For ninja it currently looks like this: >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > env["LINKCOM"] = '${TEMPFILE("$LINK $LINKFLAGS >>>>>>>>>>>>>>>>>> /OUT:$TARGET.windows >>>>>>>>>>>>>>>>>> > $_LIBDIRFLAGS $_LIBFLAGS $_PDB $SOURCES.windows", >>>>>>>>>>>>>>>>>> "$LINKCOMSTR")}' >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > env["SHLINKCOM"] = '${TEMPFILE("$SHLINK $SHLINKFLAGS >>>>>>>>>>>>>>>>>> $_SHLINK_TARGETS >>>>>>>>>>>>>>>>>> > $_LIBDIRFLAGS $_LIBFLAGS $_PDB $_SHLINK_SOURCES", >>>>>>>>>>>>>>>>>> "$SHLINKCOMSTR")}' >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > So I'm curious if moving $LINK $LINKFLAGS to the left >>>>>>>>>>>>>>>>>> of ${TEMPFILE >>>>>>>>>>>>>>>>>> > would help... >>>>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>>>> 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 >>>>>>>>>>>> >>>>>>>>>>> _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users