views:

29

answers:

2

How do I specify that CMake should use a different link_directories value depending on whether the target is 32-bit is 64-bit? For example, 32-bit binaries need to link with 32-bit Boost, 32-bit binaries need to link with 64-bit Boost.

+1  A: 

You do something along these lines

  if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
    set( BOOST_LIBRARY "/boost/win64/lib" )
  else( CMAKE_SIZEOF_VOID_P EQUAL 8 )
    set( BOOST_LIBRARY "/boost/win32/lib" )
  endif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
  set( CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY} )
As specified by Martin, this shouldn't be needed for boost, but it is a good to know method anyway.
tibur
+2  A: 

For Boost specifically, you should use

FIND_LIBRARY(Boost 1.44 COMPONENTS ...)

Then the CMake variable Boost_LIBRARY_DIRS will contain the correct library path, which has to be set using LINK_DIRECTORIES, e.g.

LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

The more general case is correctly described in user434507's answer.

Martin