web-dev-qa-db-fra.com

Option pour forcer la génération 32 bits ou 64 bits avec cmake

Je voudrais proposer un moyen qui construit toujours ma cible comme un exécutable exécutable 32 bits ou toujours 64 bits avec cmake indépendant du système hôte (Ajout de l'indicateur "-m32" ou "-m64" pour gcc, pas sûr que faire pour les autres compilateurs).

Je peux penser à trois façons de procéder, laquelle dois-je utiliser?

  1. une option (-DUSE32bit = true)
  2. une chaîne d'outils (-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)
  3. types de build (-DCMAKE_BUILD_TYPE = release32)

Dans mon cas, la construction forcée 32 bits sera la valeur par défaut et devrait être facile à utiliser. Une construction forcée 64 bits est également utile dans certains cas et ne devrait pas être trop difficile. L'utilisation de la largeur de bits du système hôte est rarement logique pour mon cas et je ne veux pas le prendre en charge.

J'ai trouvé une question connexe ici ( La bonne façon de forcer une compilation 32 bits en utilisant CMake ) mais les réponses discutent principalement de la façon dont cela peut être fait, pas de la meilleure façon de le rendre configurable.

18
Flogo

TL; DR

Utiliser la chaîne d'outils

En profondeur

  1. une option (-DUSE32bit = true)

Ce n'est pas évolutif, je suppose. Et si vous voulez construire N projets? Vous devez ajouter N options.

  1. types de build (-DCMAKE_BUILD_TYPE = release32)

Cela peut bien fonctionner. Mais à mon avis, vous mélangez des choses indépendantes. Je suis aussi sûr que vous devez adapter find_package comportement en définissant un *_ROOT CMake variables. Ce n'est pas possible de le faire avec CMAKE_BUILD_TYPE (au moins, encore une fois, de façon évolutive).

  1. une chaîne d'outils (-DCMAKE_TOOLCHAIN_FILE = 64bit.toolchain)

La meilleure variante. Si vous souhaitez créer deux projets, utilisez simplement la même chaîne d'outils:

cmake -Hproj-1 -B_builds/proj-1 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
cmake -Hproj-2 -B_builds/proj-2 -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain

Si vous voulez construire votre ExternalProject_Add tiers avec une architecture 64 bits - passez simplement la chaîne d'outils à CMAKE_ARGS:

ExternalProject_Add(
    ...
    CMAKE_ARGS ... -DCMAKE_TOOLCHAIN_FILE=/.../64bit.toolchain
    ...
)

Vous voulez vous adapter find_package - ajoutez simplement toutes les variables CMake au fichier de la chaîne d'outils.

7
user2288008

Pour Visual Studio et par https://cmake.org/cmake/help/latest/variable/CMAKE_GENERATOR_PLATFORM.html

Pour les générateurs Visual Studio avec VS 2005 et supérieur, cela spécifie l'architecture cible.

cmake . -DCMAKE_GENERATOR_PLATFORM=x64
18
tresf