2010-12-03 29 views
10

Je réutilise une bibliothèque C héritée dans une application iOS et dans une application Android. Je veux personnaliser certaines définitions de macros (par exemple pour la journalisation). Existe-t-il des définitions standard pour vérifier (en utilisant #ifdef) si le code est compilé pour iOS ou Android/NDK?Comment déterminer le code C est compilé pour Android/NDK ou iOS

+3

S'il vous plaît n'utilisez pas # ifdef pour cela. Écrivez du code portable et mettez des problèmes spécifiques à la plateforme dans des modules par plate-forme avec une interface commune. –

+0

Mettre dans le module différent, compiler chacun en utilisant un chemin d'inclusion différent – qrtt1

+3

Généralement, mais il faut équilibrer l'ampleur de la différence avec l'opportunité de garder la fonctionnalité organisée. L'utilisation excessive de l'abstraction peut tout aussi facilement rendre le code illisible que sous utilisation. Si j'avais un gros bloc de code qui était identique à l'exception d'une différence linux-vs-bsd héritée dans un appel système unix, je l'aurais probablement #ifdef avec un commentaire là, plutôt que d'inventer un nouveau concept personnel d'unix portable et enterrer l'implémentation dans les fonctions en ligne extraites d'un fichier d'en-tête. –

Répondre

23

__ANDROID__ ou ANDROID pour Android (compilation avec le NDK) et __APPLE__ sur les plates-formes d'Apple (iOS ou OSX)

+0

Il est ANDROID sans underscore. Je vous remercie. – Miriam

+4

Non, il s'agit de '__ANDROID__' ** avec ** underscores. Citant [David Turner] (http://markmail.org/message/5ekhfztchs45lz3n): "Je recommanderais de définir explicitement' __ANDROID__' pour l'instant, cela devrait être la seule chose que les utilisateurs de NDK devraient tester à nouveau ". –

1

Vous devriez envisager de créer deux projets distincts pour les plates-formes avec des répertoires output/bin séparés mais du code source partagé. Ensuite, vous venez de définir certains définissent dans les propriétés du projet pour Android et iOS afin que vous puissiez le reconnaître lors de la compilation