Quiero saber cómo podría escribir una configuración de CMake que permita la compilación de las arquitecturas x86 y x64 utilizando cualquier compilador y sistema operativo.Compilación de CMake Multiarchitecture
Respuesta
Sería genial si CMake tuviera una opción de 32/64bit fuera de la caja. No es así, por lo que deberá aplicar uno de los métodos dependientes del compilador o generador. P. ej .:
GCC (en Linux) y algunos otros compiladores, p. Sun Studio. Establezca
CFLAGS
yCXXFLAGS
para incluir-m32
(compilación de 32 bits) o-m64
(compilación de 64 bits).Windows, generador de Visual Studio. Use un generador de 64 bits, p.
cmake -G "Visual Studio 10 Win64" path\to\source\dir
para compilar 64 bits (x64). Omita "Win64" en el nombre del generador, para compilar 32 bit
Mac OS X. Use
CMAKE_OSX_ARCHITECTURES
CMake variable.cmake -DCMAKE_OSX_ARCHITECTURES=i386 /path/to/source/dir
compilará 32 bits construircmake -DCMAKE_OSX_ARCHITECTURES=x86_64 /path/to/source/dir
compilará 64 bits.cmake "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" /path/to/source/dir
creará binarios universales 96 bits :)
Lo anterior se reformulado ligeramente.
http://dev.mysql.com/doc/internals/en/compiling-for-different-hardware-achitectures.html
¡Esto es maravilloso! Pero para Visual Studio, ¿no debería ser -G ya que es un generador? También para Visual Studio, ¿sería posible establecer algún tipo de indicador en el archivo CMakeLists.txt para decirle de forma automática cuál usar (es decir, solicitar que seleccione i386 o x86-64 y establecerlo en función de su respuesta)? – OniLink
Debería ser -G, y el generador debe pasar a la línea de comando. También puede usar cmake-gui, una interfaz gráfica basada en Qt, y seleccionar el generador apropiado de la lista desplegable. –
@OniLink, @Marcus. Sí, debería ser -G. Muchas gracias por notarlo! Lo arreglé ahora (y también arreglé el mismo pasaje en MySQL Wiki). Para mi conocimiento, cambiar bitness para Visual Studio dentro de CMakeLists.txt no es posible, bitness aquí es propiedad del generador, y el generador no puede ser configurado/cambiado dinámicamente. –
Hay un CMake tutorial disponible en línea para ir a lo básico, esto está tomado del libro CMake. La filosofía de CMake es usar múltiples directorios de compilación, con un único árbol fuente. Por lo tanto, podría usar Visual Studio en Windows y crear un directorio de compilación utilizando el compilador de 32 bits, y otro utilizando el compilador de 64 bits.
CMake se dirige a un gran número de compiladores y sistemas operativos, pero no menciona qué idioma está utilizando, en qué sistema operativo/compilador/arquitecturas está pensando y si está utilizando toolkits/libraries.
La respuesta no tiene nada que ver con la pregunta. – Yola
Si CMAKE_OSX_ARCHITECTURES = i386 le da el error "opción no reconocida -arch" empezar de nuevo y en lugar de tratar:
cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10
- 1. cmake: estadísticas de compilación
- 2. Cmake error de compilación
- 3. Configuraciones de compilación CMake Eclipse
- 4. Compilación para iOS con CMake
- 5. ¿Puede CMake generar scripts de compilación que * no * usan cmake?
- 6. cmake, imprime comandos de compilación/enlace
- 7. Cmake: directorio de compilación en incluir ruta
- 8. ¿Cómo soluciono una compilación CMake aparentemente corrupta?
- 9. CMake: especificando la cadena de herramientas de compilación
- 10. use CMake para obtener la revisión de svn de compilación
- 11. ¿Cómo especifico opciones de compilación para proyectos basados en CMake?
- 12. ¿Cómo generar dependencias de compilación desde CMake o make?
- 13. Cmake para agregar eventos de compilación personalizados del proyecto VS2010
- 14. Agregue un directorio fuente externo a una compilación de CMake
- 15. gcov con CMake utilizando un directorio de compilación independiente
- 16. Jenkins + Windows + CMake + múltiples tipos de compilación (depuración, versión)
- 17. CMake add_custom_command/_target en diferentes directorios para la compilación cruzada
- 18. CMake compilación cruzada: banderas C del archivo toolchain ignorado
- 19. CMake ... ccmake or cmake?
- 20. cmake y libpthread
- 21. ¿Cómo puedo establecer indicadores de compilación específicos para un objetivo específico en una configuración de compilación específica utilizando CMake?
- 22. Objetivos opcionales en Cmake
- 23. cmake RUNTIME_OUTPUT_DIRECTORY en Windows
- 24. CMake comandos de limpieza personalizados
- 25. cmake "make run"
- 26. Compilación de proyectos de 32 bits frente a proyectos de 64 bits con CMake
- 27. Cmake ignorando CMAKE_BUILD_TYPE = depuración
- 28. La forma correcta de forzar una compilación de 32 bits utilizando CMake
- 29. ¿Cómo puedo producir solo un archivo de objeto (* .o) desde un destino de compilación CMake?
- 30. Autotools vs CMake
Posiblemente relevantes: http://stackoverflow.com/questions/5280168/ making-a-cross-platform-library-with-cmake –