[CMake] how to really change CMake linker

Manoj R manojr at ti.com
Mon May 16 00:13:50 EDT 2016


Mark Abraham <mark.j.abraham at ...> writes:

> 
> Hi David,
> Thanks very much for your reply! That was extremely helpful, and will 
let several packages document a functional workflow for the future.On 
Tue, Aug 12, 2014 at 5:38 AM, David Cole <dlrdave-
YDxpq3io04c at public.gmane.org> wrote:
> Unless it is overridden somewhere else along the way, the following is
> used to create the link command line for a C++ executable:
>     (found in Modules/CMakeCXXInformation.cmake)
>     if(NOT CMAKE_CXX_LINK_EXECUTABLE)
>       set(CMAKE_CXX_LINK_EXECUTABLE
>          "<CMAKE_CXX_COMPILER>  <FLAGS> <CMAKE_CXX_LINK_FLAGS>
> <LINK_FLAGS> <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")
>     endif()
> As you can see, by default, the C++ compiler is used as a front end to
> link C++ executables...
> Similarly for other types of targets, there are
> CMAKE_CXX_CREATE_SHARED_LIBRARY and CMAKE_CXX_CREATE_SHARED_MODULE. 
And
> for other languages, there are CMAKE_${LANG}_CREATE_... variables too.
> 
> 
> Ah, that explains one source of confusion. I read 
CMAKE_CXX_LINK_EXECUTABLE with LINK as an adjective - specify the 
executable that does linking - whereas the above use of CREATE makes 
clear that the sense of LINK is intended to be as a verb - specify how 
to create an executable. The docs did say that this variable specifies a 
rule, now that I know what to look for. 
> 
> 
> In order to use the linker you want, you would have to define a custom
> CMAKE_CXX_LINK_EXECUTABLE that uses "<CMAKE_LINKER>" in its definition
> of the linker command line.
> 
> 
> Right. It's easy to assume that this would be the default behaviour 
for constructing linking command lines. It's probably too late to 
consider a change, but I hope the original reasoning works well 
somewhere! 
> 
> Mark
>  
> 
> HTH,
> David C.
> 
> 
> I am setting this CMAKE_CXX_LINK_EXECUTABLE in one of my projects but 
the CMAKE is still taking compiler as the link executable 
SET(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> ${CMAKE_C_FLAGS} -z --
map_file=<TARGET_NAME>.map --output_file=<TARGET_NAME> 
${PLATFORM_CONFIG_L_FLAGS} <OBJECTS> ${CMD_SRCS} ${LIB}" CACHE STRING 
"linker executable") 

> 
> 
> 




More information about the CMake mailing list