2011-03-17 8 views
40

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

+0

Posiblemente relevantes: http://stackoverflow.com/questions/5280168/ making-a-cross-platform-library-with-cmake –

Respuesta

73

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 y CXXFLAGS 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 construir

    cmake -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

+0

¡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

+0

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. –

+1

@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. –

2

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.

+0

La respuesta no tiene nada que ver con la pregunta. – Yola

0

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 
Cuestiones relacionadas