I have an application where I want to link some targets against shared versions of Boost and some against static versions.<div><br></div><div>(I&#39;d prefer shared in general, but I need to link against the static version of boost for my matlab mex interface, to avoid loading the different version of boost shipped by matlab on runtime. I&#39;m using <a href="https://github.com/mariusmuja/flann/blob/master/src/matlab/CMakeLists.txt">this approach</a> of a custom target calling the mex command to compile the mex file.)<div>
<br></div><div>FindBoost.cmake honors the Boost_USE_STATIC_LIBS variable, but that doesn&#39;t quite solve it.</div><div><br></div><div>I&#39;ve had the following ideas, none of which I&#39;m happy with:</div><div><ol><li>
Use -L${Boost_LIBRARY_DIRS} and then construct the name by doing a string replacement from .so/.dylib to .a in ${Boost_THREAD_LIBRARY}. Definitely won&#39;t work on Windows, might not work for some types of Boost installations on Linux/Mac, and fails at link-time instead of configure-time if the static version doesn&#39;t exist. Maybe there&#39;s an equivalent transformation that&#39;ll probably work on Windows; I don&#39;t know, I&#39;m not a Windows user.<br>
<br></li><li>Copy FindBoost.cmake to FindBoostS.cmake and replace all the variables to use a BoostS prefix, as well as making the conditionals for USE_STATIC_LIBS always be on; then I can run find_package(Boost) as well as find_package(BoostS).<br>
<br></li><li>There might be some trickery to approximate (2) without actually modifying FindBoost, but I haven&#39;t figured it out.<br><br></li><li>Modify FindBoost.cmake either to look for both dynamic and shared libraries and set e.g. Boost_THREAD_LIBRARY_STATIC and Boost_THREAD_LIBRARY_SHARED if found, or to add shared and static versions for each component, as in <a href="http://www.cmake.org/pipermail/cmake/2012-February/049142.html">http://www.cmake.org/pipermail/cmake/2012-February/049142.html</a></li>
</ol></div><div>(4) is obviously the &quot;best&quot; approach, but it&#39;s also probably much more work than I really want to do on this.</div></div><div><br></div><div>Any suggestions? Some other approach I haven&#39;t thought of, a way to do (3), a copy of (4) floating around somewhere?</div>
<div><br></div><div>Thanks,</div><div>Dougal</div>