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