> -----Original Message----- > From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On > Behalf Of Verweij, Arjen > Sent: Thursday, July 22, 2010 6:59 AM > To: cmake@cmake.org > Subject: Re: [CMake] how to set ar/ranlib flags per target > > Hi Kelly, > > I'm using cmake to migrate from a legacy build system. The source > consists of C C++ Fortran and Fortran90. I think -in all- there are 15 > binaries. > > One of the problems for us is linking. Cmake somehow decides to take > compiler X to link executable Y. But in some cases it didn't use the > one we expected. > > So we wrapped add_executable() inside a function that takes an extra > argument to control the linker language: > > function (FEXECUTABLE EXE_NAME LINK_LANG ) > > [...] > > add_executable (${EXE_NAME_EXE} ${FILE_LIST_M}) > > if ( ${LINK_LANG} STREQUAL "CXX" ) > set_target_properties (${EXE_NAME_EXE} PROPERTIES > LINKER_LANGUAGE CXX) > elseif ( ${LINK_LANG} STREQUAL "C" ) > set_target_properties (${EXE_NAME_EXE} PROPERTIES > LINKER_LANGUAGE C) > elseif ( ${LINK_LANG} STREQUAL "Fortran" ) > set_target_properties (${EXE_NAME_EXE} PROPERTIES > LINKER_LANGUAGE Fortran) > else () > message( FATAL "Unknown linker language specified for function > FEXECUTABLE: ${LINK_LANG" ) > endif () > > [...] > > endfunction (FEXECUTABLE) > > I'm not saying that this is proper usage of cmake, but it "works for me > (tm)". > > Perhaps you can try a similar approach with add_library() - > myadd_static_library() ? - to indicate if you want to use a 32-bit or > 64-bit archiver. > > Regards, > Arjen
Thanks Arjen, I just don't see how this can help. This snippet is ensure that the desired LINKER_LANGUAGE is set for each target, but my immediate issue is that it doesn't seem possible to inject -X64 onto the ar command line, in the correct place at all, much less on a per target basis, at least not without code changes (which I may undertake, but I'd REALLY like to avoid that). To sum up, I have these issues: 1) The definition of CMAKE_C_ARCHIVE_CREATE indicates that it should use the LINK_FLAGS, but it doesn't do so and I don't know why. 2) STATIC_LIBRARY_FLAGS *ALMOST* works, but it's putting the flag after the "/usr/bin/ar cr libfoo.a" and for AIX, it must come before the "cr". 3) trying to manipulate things by setting CMAKE_AR for instance has a global effect. I suppose my best course is to figure out a way to change the source to be able to be more selective on where STATIC_LIBRARY_FLAGS gets injected, but that seems kind of a large hurdle for me at the moment (I haven't looked at the source that much). Thanks, -Kelly > > >-----Original Message----- > >From: Hickel, Kelly [mailto:kelly_hic...@bmc.com] > >Sent: donderdag 22 juli 2010 13:46 > >To: Hickel, Kelly; Verweij, Arjen; cmake@cmake.org > >Subject: RE: how to set ar/ranlib flags per target > > > >Arjen, I saw your response about "wrapping add_library" on the list, > but > >for some reason it didn't get to my inbox. > > > >I'm not sure what you mean by "wrapping", are you talking about a code > >change, or some sort of macro? So far, I haven't been able to come up > >with any way of jamming -X64 into the right place in the ar command. > > > >Thanks, > > > > > >Kelly Hickel > > > > > > > >> -----Original Message----- > >> From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On > >> Behalf Of Hickel, Kelly > >> Sent: Wednesday, July 21, 2010 3:46 PM > >> To: Verweij, Arjen; cmake@cmake.org > >> Subject: Re: [CMake] how to set ar/ranlib flags per target > >> > >> > >> > -----Original Message----- > >> > From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On > >> > Behalf Of Verweij, Arjen > >> > Sent: Wednesday, July 21, 2010 3:43 PM > >> > To: cmake@cmake.org > >> > Subject: Re: [CMake] how to set ar/ranlib flags per target > >> > > >> > Kelly, > >> > > >> > I suffer from the same problem and solved it like this: > >> > > >> > SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> -X64 cr <TARGET> > <LINK_FLAGS> > >> > <OBJECTS>") > >> > SET(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> -X64 r <TARGET> > <LINK_FLAGS> > >> > <OBJECTS>") > >> > SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -X64 <TARGET>") > >> > SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE}) > >> > SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND}) > >> > SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH}) > >> > SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE}) > >> > SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND}) > >> > SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH}) > >> > > >> > Does that help you? > >> > > >> > Regards, > >> > Arjen > >> > >> Thanks Arjen, but I don't believe it does. > >> As far as I know that sets the flag globally, I have some targets > that > >> are 32 bit and some that are 64 bit, so I need to set it per target. > >> > >> Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost* > >works, > >> but it puts the flags AFTER the name of the output library, and ar > on > >> AIX doesn't like that, complains it can't find the object file -X64. > >> Apparently the flag must come before the "cr" or "r" commands, e.g. > >"ar > >> -X64 cr foo.a bar.o baz.o". > >> > >> Thanks, > >> -Kelly > >> > >> > > >> > >-----Original Message----- > >> > >From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On > >> > Behalf > >> > >Of Hickel, Kelly > >> > >Sent: woensdag 21 juli 2010 21:00 > >> > >To: cmake@cmake.org > >> > >Subject: [CMake] how to set ar/ranlib flags per target > >> > > > >> > > > >> > >Hello, > >> > > > >> > >I'm using CMake 2.8.1, and have a problem on AIX similar to this > >> one: > >> > >http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa . > >> > > > >> > >I have the additional complication of needing to build both 32 > and > >> 64 > >> > >bit libraries from the same set of CMake files. > >> > > > >> > >I've tried a number of things (list below), does anyone have any > >> > ideas? > >> > > > >> > >(Wherever I write CMAKE_C_xyz below, I've also changed > >CMAKE_CXX_xyz > >> > >at the same time, where I write xyz_ARCHIVE_CREATE, I've also > >> changed > >> > >xyz_ARCHIVE_APPEND) > >> > > > >> > >1) Adding the flag to LINK_FLAGS because the definition for > >> > > CMAKE_C_ARCHIVE_CREATE appears to include that on the command > >> line, > >> > > but the generated link.txt input files don't include any > >options. > >> > >2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private > >> > > toolchain file that I specify on the command line. By writing > >> > > messages that show the value of that variable, I can see my > >> change > >> > > take, but it appears to get reset to the default before > >> processing > >> > of > >> > > my CMakeLists.txt file begins. > >> > >3) Frequently set CMAKE_C_ARCHIVE_CREATE to "<CMAKE_AR> > <AR_FLAGS> > >r > >> > > <TARGET> <LINK_FLAGS> <OBJECTS>", when I did this, I ended up > >> with > >> > >the > >> > > literal string "AR_FLAGS" in the link.txt file, not that > useful! > >> > > > >> > >I'm sure I'm missing something, any hints will be appreciated! > >> > > > >> > >Thanks, > >> > >Kelly > >> > > > >> > >_______________________________________________ > >> > >Powered by www.kitware.com > >> > > > >> > >Visit other Kitware open-source projects at > >> > >http://www.kitware.com/opensource/opensource.html > >> > > > >> > >Please keep messages on-topic and check the CMake FAQ at: > >> > >http://www.cmake.org/Wiki/CMake_FAQ > >> > > > >> > >Follow this link to subscribe/unsubscribe: > >> > >http://www.cmake.org/mailman/listinfo/cmake > >> > _______________________________________________ > >> > Powered by www.kitware.com > >> > > >> > Visit other Kitware open-source projects at > >> > http://www.kitware.com/opensource/opensource.html > >> > > >> > Please keep messages on-topic and check the CMake FAQ at: > >> > http://www.cmake.org/Wiki/CMake_FAQ > >> > > >> > Follow this link to subscribe/unsubscribe: > >> > http://www.cmake.org/mailman/listinfo/cmake > >> > >> _______________________________________________ > >> Powered by www.kitware.com > >> > >> Visit other Kitware open-source projects at > >> http://www.kitware.com/opensource/opensource.html > >> > >> Please keep messages on-topic and check the CMake FAQ at: > >> http://www.cmake.org/Wiki/CMake_FAQ > >> > >> Follow this link to subscribe/unsubscribe: > >> http://www.cmake.org/mailman/listinfo/cmake > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://www.cmake.org/mailman/listinfo/cmake _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake