¿Cómo especifico que CMake debería usar un valor link_directories
diferente dependiendo de si el destino es de 32 bits o de 64 bits? Por ejemplo, los binarios de 32 bits deben vincularse con Boost de 32 bits, los binarios de 64 bits deben vincularse con Boost de 64 bits.Compilación de proyectos de 32 bits frente a proyectos de 64 bits con CMake
Respuesta
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})
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.
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.
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) –
hay un error TINY en la segunda línea. No {$ BITS} pero $ {BITS}. $ signo antes de los corchetes. – Nick
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 enC:/Boost_32
oC:/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.
- 1. Compatibilidad con Java de 32 bits frente a 64 bits
- 2. Determinación de Windows de 64 bits frente a 32 bits
- 3. Compilación de 32 bits con llvm-gcc de 64 bits
- 4. Java JDK 32 bits frente a 64 bits
- 5. QtCreator en Linux: 32 bits frente a 64 bits
- 6. 64 bits por división de 32 bits
- 7. cómo generar proj VS con configuraciones de 32 bits y de 64 bits usando CMake
- 8. Agregar números de 64 bits con aritmética de 32 bits
- 9. Rendimiento de punto flotante de 32 bits frente a de 64 bits
- 10. Puerto 32 bits Controlador de Windows a 64 bits Windows
- 11. Determinar la arquitectura JRE de 32 bits frente a la de 64 bits
- 12. conversión de aplicación .NET 32 bits a 64 bits
- 13. ¿Puedo controlar la arquitectura (32 bits frente a 64 bits) al compilar un ejecutable de pyinstaller?
- 14. Descripción del tamaño máximo de almacenamiento dinámico de JVM: 32 bits frente a 64 bits
- 15. Registros de 64 bits en ventanas de 32 bits
- 16. PC de desarrollo: AMD vs Intel y 32 bits frente a 64 bits
- 17. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 18. Orientación a 32 bits y a 64 bits con Visual Studio en la misma solución/proyecto
- 19. Compilación de sistema de 64 bits para el sistema de 32 bits - la compatibilidad
- 20. Wendy ASP.NET AJAX Error/32 bits a 64 bits
- 21. Compilación de la aplicación matlab de 32 bits en la máquina de 64 bits (C++)
- 22. Mezcla de 32 bits y 64 bits P/Invoca
- 23. MapViewOfFile compartido entre procesos de 32 bits y 64 bits
- 24. Instalar controladores de 32 y 64 bits con Wix?
- 25. Objeto compartido/bibliotecas mixtas de 32 bits y 64 bits
- 26. Ejecute AnyCPU como 32 bits en sistemas de 64 bits
- 27. ¿Cómo instalar Python 2.7.3 32 bits y 64 bits de Windows lado a lado
- 28. División de 64/32 bits en un procesador con división de 32/16 bits
- 29. ¿Es posible detectar 32 bits frente a 64 bits en un script bash?
- 30. ¿iPhone OS es de 64 bits o 32 bits?
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
¿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