Drapeaux de compilation

Types, méthodes et généralement toute partie de votre code peuvent être définis conditionnellement suivant des drapeaux disponibles à la compilation. Ces drapeaux sont par défaut lus depuis la cible triple LLVM d'hôte, séparés par des -. Pour obtenir la cible vous pouvez exécuter llvm-config --host-target.

$ llvm-config --host-target
x86_64-unknown-linux-gnu

# ainsi les drapeaux sont: x86_64, unknown, linux, gnu

De plus, si un programme est compilé avec --release, le drapeau release sera positionné.

Vous pouvez vérifier ces drapeaux avec la méthode macro flag?:

{% if flag?(:x86_64) %}
  # du code spécifique au plate-forme 64 bits
{% else %}
  # du code spécifique au plate-forme non 64 bits
{% end %}

Elle retourne true ou false, vous pouvez donc utiliser && et || normalement:

{% if flag?(:linux) && flag?(:x86_64) %}
  # du code spécifique à linux 64 bits
{% end %}

Ces drapeaux sont généralement utilisés dans les liaisons C pour définir de manière conditionnelle des types et fonctions. Par exemple le type bien connu size_t est défini comme suit en Crystal:

lib C
  {% if flag?(:x86_64) %}
    alias SizeT = UInt64
  {% else %}
    alias SizeT = UInt32
  {% end %}
end

results matching ""

    No results matching ""