web-dev-qa-db-fra.com

Compilation multi-architecture de CMake

Je veux savoir comment je pourrais écrire une configuration CMake qui permette de compiler à la fois des architectures x86 et x64 avec n’importe quel compilateur et système d’exploitation.

45
OniLink

Ce serait bien si CMake avait une option 32/64 bits prête à l'emploi. Ce n'est pas le cas, vous devrez donc appliquer l'une des différentes méthodes dépendantes du compilateur ou du générateur. Par exemple.:

  • GCC (sous Linux) et certains autres compilateurs, par exemple Sun Studio. Définissez CFLAGS et CXXFLAGS pour inclure -m32 (version 32 bits) ou -m64 (version 64 bits).

  • Windows, générateur de Visual Studio. Utilisez un générateur 64 bits, par exemple. 

    cmake -G "Visual Studio 10 Win64" path\to\source\dir 

    compiler 64 bits (x64). Omettre "Win64" dans le nom du générateur, à construire pour 32 bits

  • Mac OS X. Utilisez la variable CMAKE_OSX_ARCHITECTURES CMake. 

    cmake -DCMAKE_OSX_ARCHITECTURES=i386 /path/to/source/dir compilera une version 32 bits

    cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 /path/to/source/dir compilera 64 bits.

    cmake "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" /path/to/source/dir créera des binaires universels 96 bits :)

Ce qui précède est légèrement reformulé.

http://dev.mysql.com/doc/internals/en/compiling-for-different-hardware-achitectures.html

77

Il existe un tutoriel CMake disponible en ligne pour passer en revue les bases, ceci est extrait du livre CMake. La philosophie de CMake consiste à utiliser plusieurs répertoires de construction, avec un seul arbre source. Vous pouvez donc utiliser Visual Studio sous Windows et créer un répertoire de construction à l'aide du compilateur 32 bits et un autre à l'aide du compilateur 64 bits.

CMake cible un grand nombre de compilateurs et de systèmes d'exploitation, mais vous ne précisez pas le langage que vous utilisez, votre système d'exploitation/compilateur/architectures auquel vous songez et si vous utilisez des kits d'outils/bibliothèques.

3
Marcus D. Hanwell

Si CMAKE_OSX_ARCHITECTURES = i386 vous donne l'erreur "Option non reconnue -Arch", recommencez et essayez à la place:

cmake -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=i386 -DCMAKE_SYSTEM_VERSION=10
0
Patrick Rose