[CMake] Problem with NMake generator after upgrade from 2.4.6 to 2.6.3

Dieter Oberkofler doberkofler.lists at gmail.com
Mon Apr 27 12:47:22 EDT 2009


Thank you!
-Dieter 

> -----Original Message-----
> From: Brad King [mailto:brad.king at kitware.com] 
> Sent: Monday, April 27, 2009 3:46 PM
> To: doberkofler.lists at gmail.com
> Cc: billlist at nycap.rr.com; CMake at cmake.org
> Subject: Re: [CMake] Problem with NMake generator after 
> upgrade from 2.4.6 to 2.6.3
> 
> Dieter Oberkofler wrote:
> > I have been digging into this issue and found out that the problem 
> > might be cause by the following command that might have 
> changed it's 
> > behaviour in CMake 2.6.4 ========== SET(CMAKE_CXX_LINK_EXECUTABLE 
> > "link.exe /OUT:<TARGET> > <TARGET>.ler ${CMAKE_START_TEMP_FILE} 
> > <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS>
> > <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
> > ==========
> > The linker complains about a file 
> @CMakeFiles\LJS_049.dir\objects1.rsp 
> > that cannot be found.
> > There is a objects1.rsp in the cmake build directories but I assume 
> > the file might not be searched in the proper directory.
> 
> Put <OBJECTS> before the ${CMAKE_START_TEMP_FILE}.  I don't 
> think the linker supports recursive response files, so it is 
> actually looking for a file with an '@' in it name.
> 
> > A few questions on this:
> > 1) Has the behaviour changed here?
> 
> It changed from 2.4 to 2.6 but should not have from 2.6.3 to to 2.6.4.
> 
> We used to list all the object files on the command line in 
> place of the <OBJECTS> token.  Now we use a response file to 
> support projects that have a very large number of object files.
> 
> > 2) Is there now a better way to generate a file (*.ler in 
> my example) 
> > with the output of the linker?
> 
> There is no official interface for this.  You can try to 
> re-use the rule CMake defines as much as possible:
> 
> string(REGEX REPLACE "^([^ ]+)" "\\1 > <TARGET>.ler "
>    CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE}")
> 
> or for MS only:
> 
> string(REGEX REPLACE "/nologo" "> <TARGET>.ler"
>    CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE}")
> 
> In general I would not expect full compatibility across CMake 
> versions for these platform rule variables.  We need to be 
> able to change them in the platform files to support new 
> features or fix bugs.  We cannot possibly test every way 
> projects might override them.
> 
> -Brad



More information about the CMake mailing list