2016-09-27 1 views
1

J'ai src/bin/linux-only.rs qui fait des choses qui ne fonctionnent que sous Linux (par exemple, des liaisons libc qui n'existent que sous Linux). Je veux exclure ce fichier d'être construit sur OS X.Comment puis-je exclure la création d'un fichier sous OS X?

J'ai commencé à mettre #[cfg(target_os = "linux")] sur chaque bloc dans linux-only.rs mais cela encombre le code source au-delà de toute raison.

Existe-t-il une meilleure façon de faire cela?

Répondre

3

L'écriture #![cfg(target_os = "linux")] (notez le point d'exclamation) en haut du fichier fonctionnera pour l'ensemble du fichier (à condition qu'il contienne un seul module), pas seulement pour le bloc suivant (item). Source: Rust reference.

Édition: si vous pouvez déplacer ce fichier dans sa propre caisse, vous pouvez tirer parti de platform-specific dependencies de Cargo.

+0

Bien sûr! Maintenant c'est clair. Avec l'exclamation, il s'applique à l'ensemble du "bloc", car c'est en haut du fichier qu'il s'applique à l'ensemble du module. Merci. – hansaplast

+0

un problème reste cependant: la construction de la cargaison se plaint maintenant avec 'erreur: fonction principale non trouvée». Comment pourrais-je éviter cela? – hansaplast

+0

@PhilippKeller: Vous pouvez fournir un '# [cfg (not (target_os =" linux "))] fn main() {}', cependant je crains ici que l'annotation * au sein du module soit désordonnée. Êtes-vous sûr qu'il n'y a aucun moyen de simplement dire à la cargaison de ne considérer que le fichier sous Linux? –