[CMake] CMAKE_EXE_LINKER_FLAGS for shared libraries?

Robert Dailey rcdailey at gmail.com
Mon Dec 12 17:10:37 EST 2011


Another issue...

At what point is it most important for the values of
CMAKE_SHARED_LINK_FLAGS to exist? I set the value of this variable before
my call to add_library(), however after that at some point the flags will
get reverted because I'm stepping out of function scope. Does it need to
exist up to the end of the current cmake script? My flow is basically this
(pseudo call stack):

Enter CMakeLists.txt
- Call define_project() function (in a separate cmake module)
- - Call ignore_libs() function
- - - Set CMAKE_SHARED_LINK_FLAGS with PARENT_SCOPE
- - Call create_target() function
- - - Call add_library() command
Leave CMakeLists.txt

I've done some testing and I find that before the call to add_library(), my
flags are setup properly in the CMAKE_SHARED_LINK_FLAGS variable.

---------
Robert Dailey


On Mon, Dec 12, 2011 at 2:20 PM, Michael Wild <themiwi at gmail.com> wrote:

> On 12/12/2011 09:13 PM, Robert Dailey wrote:
> > On Mon, Dec 12, 2011 at 2:10 PM, David Cole <david.cole at kitware.com
> > <mailto:david.cole at kitware.com>> wrote:
> >
> >     Apparently, they are undocumented, but there are also:
> >
> >     CMAKE_SHARED_LINKER_FLAGS and CMAKE_MODULE_LINKER_FLAGS (and their
> >     per-config variants) for SHARED and MODULE library targets as well.
> >
> >     Use CMAKE_SHARED_LINKER_FLAGS instead.
> >
> >
> > Thanks for the information guys. I'm having a minor problem with these
> > variables though.
> >
> > Here is how I use it:
> >
> > set( CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}
> > /NODEFAULTLIB:\"${lib}\" )
> >
> > Prior to calling the set above, the shared linker flags look like this:
> >
> >  /STACK:10000000 /machine:X86
> >
> > After calling the set above, it looks like this:
> >
> >   /STACK:10000000 /machine:X86 ;/NODEFAULTLIB:"LIBC"
> >
> > For some reason a semi-colon is being inserted prior to the
> > /NODEFAULTLIB part. I don't know why this is happening but visual studio
> > is complaining about it. Any reason why this is happening? Thanks.
> >
>
> That's how CMake works.
>
> set(VAR val1 val2 val3)
>
> defines a *list* where the elements are separated by a semi-colon (;).
> To prevent that, quote the assignment:
>
> set(VAR "val1 val2 val3")
>
>
> Michael
>
> --
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20111212/12a5ec1e/attachment.htm>


More information about the CMake mailing list