[CMake] link_libraries() deprecated. Why?

Marcel Loose loose at astron.nl
Thu Apr 2 04:03:03 EDT 2009


Hi Philip,

Thanks for your reply. Your solution is ok, but it looks a bit like a
workaround for a feature that is missing, but was once there:
link_libraries().

To me, it's not really clear why link_libraries() has been deprecated
and, for example, include_directories() has not. IMHO, using
target_link_libraries() for a general library has a too fine
granularity. 
Suppose include_directories() were deprecated as well in favour of, say,
target_include_directories(). That would create the same problem: carry
around variables holding a bunch of include directories that must be
supplied to each target.

I don't like to use deprecated features, so I would love to see the
deprecation of link_libraries() to be reverted. But maybe I'm missing a
good reason for not doing so.

Best regards,
Marcel Loose.


On Wed, 2009-04-01 at 23:50 -0400, Philip Lowman wrote:
> On Wed, Apr 1, 2009 at 5:35 PM, Marcel Loose <loose at astron.nl> wrote:
>         Hi all,
>         
>         I was wondering why the link_libraries() command has been
>         deprecated. Commands like include_directories() and
>         link_directories() which have the same "scope" have not been
>         deprecated. I think that link_libraries() has its virtues too.
>         
>         My reason for asking this, is that I wonder what's the proper
>         way to add a library to *all* targets in a project; for
>         example, a logging library or a threads library. Here,
>         link_libraries() provides IMHO a much cleaner solution, than
>         target_link_libraries(). The latter requires me to keep track
>         of the globally used library in a variable that must be passed
>         around; and for each target I must explicitly specify its
>         dependency on this library by using target_link_libraries().
>         
>         Or, am I missing something, and is there a cleaner way to do
>         this, without using a deprecated feature?
> 
> Often I have seen people write functions to help with this especially
> if you have more than one common library.
> 
> function(link_target_against_common_libs _target)
>    target_link_libraries(${_target} ${WHATEVER_LIBRARY})
> endfunction()
> 
> Another approach is if you have a low level library as part of your
> codebase that everyone depends upon you can simply make it dependent
> on your threading or logging libraries and anyone that is dependent
> against it will automatically link against the threading or logging
> library.
> 
> 
> -- 
> Philip Lowman



More information about the CMake mailing list