What is the difference between CMAKE_LINK_LIBRARY_SUFFIX and CMAKE_IMPORT_LIBRARY_SUFFIX? Which should I use?<br clear="all"><div><br></div><div>---------</div>Robert Dailey<br>
<br><br><div class="gmail_quote">On Mon, Nov 14, 2011 at 2:49 PM, Clinton Stimpson <span dir="ltr">&lt;<a href="mailto:clinton@elemtech.com">clinton@elemtech.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
That&#39;s what I do sometimes.  To make that easier, CMake gives some convenience<br>
variables for library prefixes and suffixes if you are on multiple platforms.<br>
<br>
Clint<br>
<div class="HOEnZb"><div class="h5"><br>
On Monday, November 14, 2011 01:20:29 pm David Cole wrote:<br>
&gt; If you already know where all the libraries are, please just use the<br>
&gt; full paths to those libraries, and do not use find_library.<br>
&gt;<br>
&gt; On Mon, Nov 14, 2011 at 3:15 PM, Robert Dailey &lt;<a href="mailto:rcdailey@gmail.com">rcdailey@gmail.com</a>&gt; wrote:<br>
&gt; &gt; On Mon, Nov 14, 2011 at 1:59 PM, Michael Hertling &lt;<a href="mailto:mhertling@online.de">mhertling@online.de</a>&gt;<br>
&gt; &gt;<br>
&gt; &gt; wrote:<br>
&gt; &gt;&gt; On 11/14/2011 06:17 PM, Robert Dailey wrote:<br>
&gt; &gt;&gt; &gt; Well maybe you can tell me I&#39;m doing this wrong then, but based on how<br>
&gt; &gt;&gt; &gt;I<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; am<br>
&gt; &gt;&gt; &gt; currently setting up my third party libraries, it is required.<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; So basically all third party libraries we use are not installed<br>
&gt; &gt;&gt; &gt; individually, instead we have a server on our intranet that contains<br>
&gt; &gt;&gt; &gt; precompiled versions of all libraries in a specific and consistent<br>
&gt; &gt;&gt; &gt; hierarchy. For this reason, it doesn&#39;t make sense to use<br>
&gt; &gt;&gt; &gt; find_library(), which would normally always give you absolute paths<br>
&gt; &gt;&gt; &gt; to your library files<br>
&gt; &gt;&gt; &gt; and thus link_directories() would not be needed.<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; Instead I have a script in CMake that iterates each third party<br>
&gt; &gt;&gt; &gt; library and<br>
&gt; &gt;&gt; &gt; adds its lib link directory to a list. When done I take this whole<br>
&gt; &gt;&gt; &gt; list of<br>
&gt; &gt;&gt; &gt; link directories and pass it to link_directories() in my top level<br>
&gt; &gt;&gt; &gt; CMakeLists file, this way each and every project will include all of<br>
&gt; &gt;&gt; &gt; the third party library lib directories to have access to them.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Instead of populating a list with the libraries&#39; directories, you might<br>
&gt; &gt;&gt; set up one variable for each library containing the latter&#39;s full path,<br>
&gt; &gt;&gt; e.g. ZLIB_LIBRARY or BDB47_LIBRARY. Since you do this in the top-level<br>
&gt; &gt;&gt; CMakeLists.txt, these variables propagate to subordinate CMakeLists.txt<br>
&gt; &gt;&gt; files and, thus, will be known wherever they are needed in your project.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt; For each target I simply create a list of my libs, like so:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; set( libraries zlib libbdb47 )<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; SET(libraries ${ZLIB_LIBRARY} ${BDB47_LIBRARY})<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt; I pass each one of these to target_link_libraries() and I leave it up<br>
&gt; &gt;&gt; &gt; to the compiler to search for where to find the file in the provided<br>
&gt; &gt;&gt; &gt; link directories.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; An unrestricted use of LINK_DIRECTORIES() means asking for trouble;<br>
&gt; &gt;&gt; especially with numerous directories, there&#39;s a growing probability<br>
&gt; &gt;&gt; that the -L option will lure the linker into a wrong directory some<br>
&gt; &gt;&gt; day. There&#39;re even situations which can&#39;t be resolved with -L/-l at<br>
&gt; &gt;&gt; all: Suppose you have a directory x with liba.so and libb.so, and a<br>
&gt; &gt;&gt; directory y with different versions of lib{a,b}.so. Suppose further<br>
&gt; &gt;&gt; you want to link against x/liba.so and y/libb.so. How do you achieve<br>
&gt; &gt;&gt; this with LINK_DIRECTORIES() and TARGET_LINK_LIBRARIES()? Reversely,<br>
&gt; &gt;&gt; insisting on the use of LINK_DIRECTORIES() limits the possibilities<br>
&gt; &gt;&gt; how to organize the libraries on your intranet server. IMO, these<br>
&gt; &gt;&gt; are actual drawbacks. OTOH, you must know the libaries&#39; locations<br>
&gt; &gt;&gt; to use LINK_DIRECTORIES(), and the libraries must be known anyway,<br>
&gt; &gt;&gt; so why not join the locations to the libraries and use full paths?<br>
&gt; &gt;<br>
&gt; &gt; Problem is, if I end up using find_library(), I will have to provide hint<br>
&gt; &gt; search directories for each and every single library, and there are about<br>
&gt; &gt; 20 of them. This to me is the same as just generating a list of<br>
&gt; &gt; directories and including those directly, and a lot less trouble.<br>
&gt; &gt; find_library() is great and I really wanted to use it for this, but to me<br>
&gt; &gt; the benefits of using it diminish when we are not using third party<br>
&gt; &gt; libraries installed in a non deterministic location. If a user installs<br>
&gt; &gt; the third party libraries in different locations on each of their<br>
&gt; &gt; machines, and different versions, it makes more sense to use it in that<br>
&gt; &gt; case.<br>
&gt; &gt; Why should I let CMake search &amp; find a library when I already know where<br>
&gt; &gt; it is? Simply to get absolute paths to those libraries? If I want<br>
&gt; &gt; absolute paths I can think of much better ways to do<br>
&gt; &gt; it, preferably through string concatenation.<br>
&gt; &gt; Another issue is that 80% of the libraries we use do not have a<br>
&gt; &gt; pre-packaged Find module provided by CMake. This means I&#39;d end up<br>
&gt; &gt; writing 80% of the find modules myself. This is a lot of work for no<br>
&gt; &gt; perceived benefit.<br>
&gt; &gt; With my points made and circumstances explained, can you still give me a<br>
&gt; &gt; good reason to use find_library?<br>
&gt; &gt; I understand and agree with the issues that come with using<br>
&gt; &gt; link_directories(), however I haven&#39;t run into those issues yet and our<br>
&gt; &gt; consistent organization of third party libraries on our intranet server<br>
&gt; &gt; are carry over from our legacy build system that I&#39;m replacing.<br>
&gt; &gt; --<br>
&gt; &gt;<br>
&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt; &gt;<br>
&gt; &gt; Visit other Kitware open-source projects at<br>
&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt; &gt;<br>
&gt; &gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt; &gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt; &gt;<br>
&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt; &gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt;<br>
&gt; --<br>
&gt;<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Clinton Stimpson<br>
Elemental Technologies, Inc<br>
Computational Simulation Software, LLC<br>
<a href="http://www.csimsoft.com" target="_blank">www.csimsoft.com</a><br>
</font></span></blockquote></div><br>