[CMake] cmake - library help

Michael Hertling mhertling at online.de
Thu May 27 17:28:51 EDT 2010


On 05/27/2010 05:32 PM, Torri, Stephen CIV NSWCDD, W15 wrote:
>> From: cmake-bounces at cmake.org on behalf of Doug Reiland
>> Sent: Thu 5/27/2010 11:14 AM
>> To: cmake at cmake.org
>> Subject: [CMake] cmake - library help
>>
>> First, I am new to cmake and exploring converting our home grown build system.
>> How would I code this up in cmake
>> I have composite objects that need to be added to a share library
>> add_library(foo a.c b.c c.c)
> 
> Use the keyword 'SHARED' to indicate you need shared library:
> 
> add_library (foo SHARED a.c b.c c.c)
> 
>> I also need x.o in the library AND x.o linked from:
>> subdir-a/aa.c subdir-a/bb.c
>  
> If the subdirectories have a project named in a CMakeLists.txt you can just tell cmake to link the library in:
>  
> So if subdir-a has a project like:
>  
>   cmake_minimum_required(VERSION 2.6)
>   add_library (subA aa.c bb.c )
>  
> then you can link subA inside the other project. For example say the 'foo' library needs to statically link in subA.
>  
>   add_library ( foo SHARED a.c b.c c.c)
>   link_libraries ( subA )

LINK_LIBRARIES() applies solely to targets defined *later*, i.e. foo
won't link against subA, but in return, all later targets will do even
if this isn't necessary. Thus, TARGET_LINK_LIBRARIES(foo subA) probably
suits better to express foo's need to be linked against subA. Moreover,
it tracks mediate dependencies automatically, e.g. if subA depends on,
say, subAA, then foo will be linked to subAA, too, although there has
not been a TARGET_LINK_LIBRARIES(foo subAA). Finally, LINK_LIBRARIES()
is considered as obsolete; in fact, the CMake 2.6 documentation does
not regularly mention it anymore, and in 2.4, it's denoted "old".

Regards,

Michael


More information about the CMake mailing list