[cmake-developers] ninja bug on windows

Peter Kümmel syntheticpp at gmx.net
Sun Mar 11 17:38:09 EDT 2012


On 11.03.2012 05:05, Peter Collingbourne wrote:
> On Fri, Mar 09, 2012 at 02:10:45PM -0500, Bill Hoffman wrote:
>> I am seeing that ninja always wants to relink the executables for me
>> every time it is run.  The output is this:
>>
>> $ ninja
>> [1/9] Linking C static library
>> Utilities\cmlibarchive\libarchive\cmlibarchive.lib
>> [2/9] Linking CXX executable bin\cmake.exe
>> [3/9] Linking CXX executable bin\cmw9xcom.exe
>> [4/9] Linking CXX executable bin\cpack.exe
>> [5/9] Linking CXX executable bin\ctest.exe
>> [6/9] Linking CXX executable Tests\CMakeLib\CMakeLibTests.exe
>> [7/9] Generating ../Docs/ctest.txt
>> [8/9] Generating ../Docs/cpack.txt
>> [9/9] Generating ../Docs/cmake.txt
>>
>> Looks like the problem is libarchive getting recreated each time.
>
> This seems to be a problem with the response file support in the
> Windows branch of Ninja.  That branch of Ninja will always relink
> any target (in this case cmlibarchive.lib) in the case where the
> list of object files exceeds the command line length limit, because
> it causes Ninja to use a response file with a different generated
> name every time.  You can see this for yourself by examining the
> .ninja_log file which contains the commands invoked by Ninja:
>
> 40	351	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja390.tmp&&  cd.
> 751	5448	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\njaC0F.tmp&&  cd.
> 681	6900	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja4F81.tmp&&  cd.
> 6169	16264	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja4F95.tmp&&  cd.
> 50	2443	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja8.tmp&&  cd.
> 51	361	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja11.tmp&&  cd.
> 50	351	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja19.tmp&&  cd.
> 40	381	0	Utilities\cmlibarchive\libarchive\cmlibarchive.lib	cmd.exe /c cd.&&  C:\PROGRA~1\MICROS~1.0\VC\bin\link.exe /lib /nologo  @C:\DOCUME~1\peter\LOCALS~1\Temp\nja21.tmp&&  cd.
>
> The Ninja master branch avoids this problem by using a fixed name per
> target for response files.  So I guess we will need to wait until we
> move to master.
>

I saw some response file comments in the ninja generator.
Are these hints complete?

Peter



More information about the cmake-developers mailing list