Setting set_target_properties(foo PROPERTIES LINK_FLAGS ...) does not work. The other libraries just come after these flags.
- Ross ________________________________ From: philiplow...@gmail.com [mailto:philiplow...@gmail.com] On Behalf Of Philip Lowman Sent: Friday, January 30, 2009 11:25 AM To: Bartlett, Roscoe A Cc: cmake@cmake.org; Perschbacher, Brent M Subject: Re: [CMake] How to append arbitrary linker options? On Fri, Jan 30, 2009 at 12:56 PM, Bartlett, Roscoe A <raba...@sandia.gov<mailto:raba...@sandia.gov>> wrote: Hello, I would like to be able to append arbitrary linker options to the end of my link lines on Unix/Linux systems. However, the options set in the CMAKE_EXE_LINKER_FLAGS variable are listed *before* all of the libraries that CMake knows about. I need to be able to append a bunch of nasty options like Fortran libraries, MPI libraries (in some nasty cases) and other libraries that must come after all other libraries. The problem is that while I could carefully list the libraries that need to be appended and I could use find_library(...) to get them correctly I may just have a glob of libraries and other linker options that someone gives me and I just want to apply them without having to parse everything out. Is there some way to force CMake on Unix/Linux systems to append arbitrary linker options? You can use set_target_properties(foo PROPERTIES LINK_FLAGS ...) on your targets. The LINK_FLAGS property will not contain CMAKE_EXE_LINKER_FLAGS, it's merely for special flags to be appended to linking a particular target. If you need to apply the same linking flags to many targets you can create a function() to ease your pain. Also, be aware if you set the LINK_FLAGS property twice, the second call will overwrite the first. If you need to append to LINK_FLAGS (lets say you want one function to add fortran linking options and the other for MPI) you must first use get_target_property() and check to see if the property existed, and then append to it. function(add_my_mpi_ldflags _target) if(CMAKE_COMPILER_IS_GNUCC) set(new_link_flags "-Whatever") get_target_property(existing_link_flags ${_target} LINK_FLAGS) if(existing_link_flags) set(new_link_flags "${existing_link_flags} ${new_link_flags}") endif() set_target_properties(${_target} PROPERTIES LINK_FLAGS ${new_link_flags}) endif() endfunction() add_executable(foo foo.cc) add_my_mpi_ldflags(foo) -- Philip Lowman
_______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake