Hi, my 2c...<br><br><div class="gmail_quote">2008/11/10 Andreas Pakulat <span dir="ltr">&lt;<a href="mailto:apaku@gmx.de">apaku@gmx.de</a>&gt;</span><br><div><br>On 10.11.08 12:01:13, Fernando Cacciola wrote:<br>
&gt; The CGAL library (<a href="http://www.cgal.org/" target="_blank">www.cgal.org</a>) uses cmake as build system. Thus, our<br>
&gt; users do:<br>
&gt;<br>
&gt; find_package(CGAL REQUIRED)<br>
&gt; include( ${CGAL_USE_FILE} )<br>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d"><br>
<br>
</div>There are projects that have headers that are usable without linking<br>
against any library. There are also projects installing their headers into<br>
a common place, that have multiple libraries. In that latter case you&#39;d<br>
have include_directories() point to the common place for the headers, but<br>
obviously you can&#39;t know which of the libraries needs to be linked in.<br>
<br>
Boost is a good example (albeit it doesn&#39;t use cmake to build itself).</blockquote><div><br>they have just added cmake support, i think it was just added to the trunk<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
There are various libraries shipped with it, they all install their headers<br>
into &lt;includedir&gt;/boost/&lt;libraryname&gt;/ and the libs are of course directly<br>
in &lt;libdir&gt;. And its common practice to have only &lt;includedir&gt;/boost in the<br>
include-directories.<br>
</blockquote><div><br>i would disagree, its common practice to have only &lt;includedir&gt; in the include-directories, and then you<br>#include &lt;boost/shared_ptr.hpp&gt;<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
For the case of a single library with a few headers, for which a UseXXX<br>
file is provided the requirement really doesn&#39;t make much sense (IMHO) -<br>
unless you can use some of the headers without linking.<br>
</blockquote><br>(snipped from above)<br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">On 10.11.08 12:01:13, Fernando Cacciola wrote:<br>
&gt; Well, I&#39;m questioning this recommended practice because it&#39;s half baked:<br><div>
&gt; It makes sense to allow users to control which targets are linked<br>
&gt; against CGAL, but NOT if OTOH they cannot control which targets are<br>
&gt; given the CGAL include directories, definitions and flags.<br>
&gt;<br>
&gt; That is, IMO, target_link_libraries makes little sense in the absence of<br>
&gt; target_include_directories, target_add_definitions and target_*_FLAGS.<br>
&gt;<br>
&gt; What it&#39;s so special about linking that only that command can be made<br>
&gt; target specific???</div><br></blockquote></div><br>I can specify which headers I want to include by writing #includes in my .cpp file.<br><br>But the ONLY place I can specify which libraries I want to include is within CMake config files.&nbsp; Thus, you only need target_link_libraries and not target_add_directories.<br>
<br>As for target_add_definitions, you don&#39;t add definitions to a target, you add them to cpp files you are compiling.&nbsp; I think you can define them for certain files if you have the add_definition in a subdirectory CMakeLists.txt,&nbsp; but I&#39;m not sure how else you can limit its &#39;scope&#39;.<br>
<br>Paul<br><br>