[CMake] link_libraries vs target_link_libraries
Paul Harris
harris.pc at gmail.com
Mon Nov 10 20:29:47 EST 2008
Hi, my 2c...
2008/11/10 Andreas Pakulat <apaku at gmx.de>
On 10.11.08 12:01:13, Fernando Cacciola wrote:
> The CGAL library (www.cgal.org) uses cmake as build system. Thus, our
> users do:
>
> find_package(CGAL REQUIRED)
> include( ${CGAL_USE_FILE} )
>
>
> There are projects that have headers that are usable without linking
> against any library. There are also projects installing their headers into
> a common place, that have multiple libraries. In that latter case you'd
> have include_directories() point to the common place for the headers, but
> obviously you can't know which of the libraries needs to be linked in.
>
> Boost is a good example (albeit it doesn't use cmake to build itself).
they have just added cmake support, i think it was just added to the trunk
>
> There are various libraries shipped with it, they all install their headers
> into <includedir>/boost/<libraryname>/ and the libs are of course directly
> in <libdir>. And its common practice to have only <includedir>/boost in the
> include-directories.
>
i would disagree, its common practice to have only <includedir> in the
include-directories, and then you
#include <boost/shared_ptr.hpp>
>
> For the case of a single library with a few headers, for which a UseXXX
> file is provided the requirement really doesn't make much sense (IMHO) -
> unless you can use some of the headers without linking.
>
(snipped from above)
> On 10.11.08 12:01:13, Fernando Cacciola wrote:
> > Well, I'm questioning this recommended practice because it's half baked:
> > It makes sense to allow users to control which targets are linked
> > against CGAL, but NOT if OTOH they cannot control which targets are
> > given the CGAL include directories, definitions and flags.
> >
> > That is, IMO, target_link_libraries makes little sense in the absence of
> > target_include_directories, target_add_definitions and target_*_FLAGS.
> >
> > What it's so special about linking that only that command can be made
> > target specific???
>
>
I can specify which headers I want to include by writing #includes in my
.cpp file.
But the ONLY place I can specify which libraries I want to include is within
CMake config files. Thus, you only need target_link_libraries and not
target_add_directories.
As for target_add_definitions, you don't add definitions to a target, you
add them to cpp files you are compiling. I think you can define them for
certain files if you have the add_definition in a subdirectory
CMakeLists.txt, but I'm not sure how else you can limit its 'scope'.
Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20081111/22c18acc/attachment.htm>
More information about the CMake
mailing list