2010-10-27 24 views

Respuesta

25

Haces algo en este sentido

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}) 
+0

Según lo especificado por Martin, esto no debería ser necesario para impulsar, pero de todos modos es un método bueno de conocer. – tibur

+6

¿Qué pensaban los desarrolladores de cmake con el else (...) parte de la sintaxis? Eso no es otro si por cierto. me confundió por un momento hasta que recordé esto. La nueva sintaxis de cmake no necesita el else, endif cosas entre paréntesis. – Matt

4

Para Boost específicamente, se debe utilizar

FIND_LIBRARY(Boost 1.44 COMPONENTS ...)

Entonces los Boost_LIBRARY_DIRS variables CRealice contendrán la ruta de la biblioteca correcta, que tiene que ser establecido utilizando LINK_DIRECTORIES, por ejemplo

LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})

El caso más general se describe correctamente en la respuesta de user434507.

11

Sé que es una pregunta bastante antigua. Pero aún está en la parte superior cuando busca con Google "cmake 32 64". tengo contestar similar a la respuesta de user434507 pero un poco más fácil de leer en mi opinión (que no me gusta de construcción más si en cmake, se ve feo):

math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") 
set(BOOST_LIBRARY "/boost/win${BITS}/lib") 
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY}) 

Este apuntará BOOST_LIBRARY camino a/impulso/win/lib o/boost/win/lib, según su arquitectura.

+0

Error: CMake Error en la compilación.cmake: 27 (math): math no puede analizar la expresión: "8 *": error de sintaxis, $ end inesperado, esperando exp_OPENPARENT o exp_NUMBER (2) –

+0

hay un error TINY en la segunda línea. No {$ BITS} pero $ {BITS}. $ signo antes de los corchetes. – Nick

0

Basado en rominf Aparece la siguiente solución (para Windows). instalo bibliotecas Boost en: C: \ Boost_32 y C: \ Boost_64

En CMakeLists.txt

math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") 
set(BOOST_ROOT C:/Boost_${BITS}) 

find_package(Boost 1.64.0 COMPONENTS ...) 

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR} ) 
LINK_DIRECTORIES(${Boost_LIBRARY_DIR}) 

Explicación:

  • CMAKE_SIZEOF_VOID_P es igual a 4 en la plataforma de 32 bits y 8 en la plataforma de 64 bits.
  • Expresión 8*${CMAKE_SIZEOF_VOID_P} evaluará a 32 o 64, respectivamente.
  • C:/Boost_${BITS} convierte en C:/Boost_32 o C:/Boost_64 automágicamente

Ventajas:

  • No es necesario condicionales (y en mis CMakeLists hay demasiados ya),
  • Es cómo el 90% deberías 'incluir' Boost con CMake.
Cuestiones relacionadas