[CMake] Add libraries to end of compilation line ...

Angeliki Chrysochou angeliki.chrysochou at gmail.com
Thu Jun 26 14:49:25 EDT 2014


Hi,

This is a good idea Hendrik! Mike, how are you creating your static
libraries? You don't need to at the "-static" option yourself...you could
tell cmake you want a static library using add_library(${YOUR_LIB} STATIC
${SOURCES}).

Cheers,
Angeliki
On Jun 26, 2014 8:12 PM, "Hendrik Sattler" <post at hendrik-sattler.de> wrote:

> Hi,
>
> you can also override the target_link_libraries function with your own in
> the top-level lists file and call the original one from within that
> function. This way you only have to edit one file.
>
> HS
>
>
> On 26. Juni 2014 18:14:36 MESZ, Michael Burns via CMake <cmake at cmake.org>
> wrote:
>>
>> Hello, Angeliki.
>>
>> Yes, you are correct. I want to link against the static libraries (.a)
>> rather than the shared objects (.so). I know it "shouldn't" make a
>> difference, but it is. Adding the "-static" option to the gcc command
>> line causes the link failures to happen. Without that option, everything
>> builds just fine.
>>
>> Ideally, I would just like to set some property that caused these common
>> libraries to be appended to the end of the compilation line as defined
>> in link.txt. Unfortunately, I haven't seen anything like that.
>>
>> Your suggestion seems to be the only option. That means I will need to
>> update nearly 180 CMake scripts. And, we'll need to make sure any new
>> scripts contain this value for every instance of TARGET_LINK_LIBRARIES
>> statement. A painful process!
>>
>> Thank you for your response, Angeliki.
>>
>> Mike
>>
>>
>> On 6/26/2014 1:16 AM, Angeliki Chrysochou wrote:
>>
>>>  Hi Michael,
>>>
>>>  I think what matters is the correctly set dependencies for your build
>>>  to succeed (target_link_libraries). By "statically link" you mean you
>>>  link against static libraries that were before shared objects, right?
>>>  This should, to my knowledge, not have any influence to how you use
>>>  target_link_libraries.
>>>
>>>  My assumption would be that maybe these static libraries are not set
>>>  as linking dependencies to all necessary target_link_libraries.
>>>
>>>  If I understood your problem correctly, if you want to have a set of
>>>  libraries that are linking dependencies to all your libraries, you
>>>  could use the following approach: set a variable (list or simple) in
>>>  your top level CMakeLists.txt file, and then by default add it to all
>>>  target_link_libraries. You could modify these "global
>>> dependencies" or
>>>  even have this variable empty with no problems.
>>>
>>>  For example your top level CMakeLists.txt could contain:
>>>
>>>  set(GLOBAL_LIBRARIES "LibA.so" "LibB.so")
>>>
>>>  and then have this in the CMakeLists.txt files of the rest of your
>>>  libraries:
>>>
>>>  target_link_libraries(${YOUR_LIB}
>>>  ${GLOBAL_LIBRARIES}
>>>  ...
>>>  )
>>>
>>>  Maybe there is some better practice out there for this, if so, I would
>>>  also be interested to know :)
>>>
>>>  Cheers!
>>>  Angeliki
>>>
>>>
>>>  On Wed, Jun 25, 2014 at 7:46 PM, Michael Burns via CMake
>>>  <cmake at cmake.org <mailto:cmake at cmake.org>> wrote:
>>>
>>>      Hello, all.
>>>
>>>      I work on a cross-platform project that has many libraries and several
>>>      applications. CMake on Linux naturally adds the TARGET_LINK_LIBRARIES
>>>      specified in the libraries after those specified in
>>> the
>>>      TARGET_LINK_LIBRARIES for the application. However, there are several
>>>      common system libraries, for example pthread, that are used by many of
>>>      the libraries and most of the applications.
>>>
>>>      The current scripts only have the common system libraries
>>>      specified in a
>>>      few scattered places. And, it works. However, we're trying to
>>>      change to
>>>      statically link these libraries and the links are failing with
>>>      "undefined reference" errors. When I manually modify link.txt to
>>>      add the
>>>      various system libraries to the end of the compilation line, it works.
>>>      So, rather than going through all of the scripts (of which there are
>>>      many), I would like to be able to list them so they are added to
>>>      the end
>>>      of every link.
>>>
>>>      Is there a way to identify libraries in such a way that they are added
>>>      to the end of the compilation line rather than
>>> having to add those
>>>      libraries to every library and application that requires them?
>>>
>>>      Thanks!
>>>
>>>      Mike
>>
>>
>>
> --
> Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail
> gesendet.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20140626/4e6310ab/attachment.html>


More information about the CMake mailing list