[CMake] findBoost says it finds static unit testing libraries, but does not set them

Mike Jackson mike.jackson at bluequartz.net
Sun Apr 19 15:42:06 EDT 2009


I think at this point the FindBoost.cmake file is just going to have
to have the same options that BJam has for building boost in all of
its variations:

Shared or Static libraries
Debug or Release
Static or Dynamic C++ Runtime Link

Just another thing to add to the mix of possibilities.

What would _really_ be helpful is if we could simply get the current
Boost build system (BJam) to just create a "UseBoost.cmake" file then
all of these issues would just go away. Wouldn't that just be a
Utopian solution. ;-)

Mike



On Sun, Apr 19, 2009 at 2:16 PM, Philip Lowman <philip at yhbt.com> wrote:
> On Sat, Apr 18, 2009 at 4:23 PM, Andreas Pakulat <apaku at gmx.de> wrote:
>>
>> On 18.04.09 11:24:48, Philip Lowman wrote:
>> > On Sat, Apr 18, 2009 at 7:45 AM, Michael Jackson <
>> > mike.jackson at bluequartz.net> wrote:
>> > > On Apr 17, 2009, at 11:56 PM, Philip Lowman wrote:
>> > >  On Thu, Apr 16, 2009 at 4:27 AM, Jonatan Bijl <jonatan.bijl at tba.nl>
>> > >> wrote:
>> > >> Boost_Unit_test_framework_library is not in the list.
>> > >>
>> > >> About the filenames: these libs are the result of compiling boost
>> > >> 1.38.0
>> > >> with cmake under linux. (Cmake for boost is still experimental). It
>> > >> might be
>> > >> that the problem is in boost’s Cmakelists.
>> > >>
>> > >> That is definitely a bug that needs to be fixed in Boost's
>> > >> experimental
>> > >> CMake build.
>> > >>
>> > >> If you rename the library to "libboost_unit_test_framework-mt-sd.a",
>> > >> however, it's still not going to solve your problem.
>> > >>
>> > >> The 's' tag is for static C++ runtime libraries and for some reason
>> > >> it's
>> > >> enabled on Windows in FindBoost.cmake when you set
>> > >> Boost_USE_STATIC_LIBS,
>> > >> but not on other platforms.  This has always seemed a bit weird to me
>> > >> and
>> > >> I've wondered why this is.
>> > >>
>> > >> SET( _boost_STATIC_TAG "")
>> > >>  set( _boost_ABI_TAG "")
>> > >>  IF (WIN32)
>> > >>    IF(MSVC)
>> > >>      SET (_boost_ABI_TAG "g")
>> > >>    ENDIF(MSVC)
>> > >>    IF( Boost_USE_STATIC_LIBS )
>> > >>      SET( _boost_STATIC_TAG "-s")
>> > >>
>> > >>    ENDIF( Boost_USE_STATIC_LIBS )
>> > >>  ENDIF(WIN32)
>> > >>  SET (_boost_ABI_TAG "${_boost_ABI_TAG}d")
>> > >>  if(Boost_DEBUG)
>> > >>    message(STATUS "[
>> > >> ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}
>> > >> ] "
>> > >>
>> > >>      "_boost_STATIC_TAG = ${_boost_STATIC_TAG}")
>> > >>    message(STATUS "[
>> > >> ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}
>> > >> ] "
>> > >>      "_boost_ABI_TAG = ${_boost_ABI_TAG}")
>> > >>  endif()
>> > >> --
>> > >> Philip Lowman
>> > >>
>> > >>
>> > > It is enabled on windows because Windows offers the option to
>> > > statically
>> > > linkCMake 2.6.3's to the c++ runtime. I know OS X does NOT offer that
>> > > option. Not sure about linux.
>> >
>> > The same variable name controls whether or not you're searching for a
>> > static
>> > or a shared boost library, however.
>>
>> Right, the reason why it only adds the "s" flag on win32 is because boost
>> libs only have that flag on win32 for their static libraries. The reason
>> is
>> that on linux the static boost libs still link against the shared c
>> runtime, while on windows they link against the static c runtime. So the
>> variable controls wether to link against a shared or a static boost lib,
>> which means lib<component>-<compiler>-<threading>-<version>.a on linux and
>> similar on windows, except that here the "s" flag is needed.
>>
>> All this based on a normal boost installation from source, not using the
>> experimental cmake buildsystem. If that one does it differently thats a
>> bug
>> in the cmake buildsystem for boost.
>
> I just used bjam and it happily built static libraries for win32 without the
> "s" flag on them.
>
> libboost_filesystem-vc90-mt-1_38.lib
> libboost_filesystem-vc90-s-1_38.lib
> libboost_filesystem-vc90-mt-s-1_38.lib
>
> So I guess the question is how to fix FindBoost to do the right thing
> without breaking anyone's builds.
>
> --
> Philip Lowman
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>


More information about the CMake mailing list