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

Philip Lowman philip at yhbt.com
Sat Apr 18 11:24:48 EDT 2009


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.

  if ( WIN32 AND Boost_USE_STATIC_LIBS )
    SET (Boost_LIB_PREFIX "lib")
  endif()
...
    # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
    IF( Boost_USE_STATIC_LIBS )
      SET( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES
${CMAKE_FIND_LIBRARY_SUFFIXES})
      IF(WIN32)
        SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
      ELSE(WIN32)
        SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
      ENDIF(WIN32)
    ENDIF( Boost_USE_STATIC_LIBS )


Shouldn't there be a difference between the two?

-- 
Philip Lowman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090418/c86004a9/attachment-0001.htm>


More information about the CMake mailing list