2009-10-26 10 views
0

dans mon projet iPhone J'utilise un asm inline, ce qui est exclu si l'architecture cible est l'appareil et non le simulateur. Puisqu'une partie du code asm en ligne est armé seulement et pas pouce j'ai besoin de spécifier le drapeau c -marm lors de la compilation pour l'iPhone, car il essaye sinon de compiler le code avec les instructions du pouce.Xcode: Construire l'architecture spécifique aux paramètres de construction du compilateur de fichiers

Et voici le problème si j'entre le drapeau -marm dans le fichier de paramètres de construction spécifiques, les sorties gcc une erreur si je compile pour le simulateur:

cc1obj: error: unrecognized command line option "-marm"

Y at-il un moyen de passer cette option si l'architecture cible est arm? Je sais que vous pouvez le faire avec les drapeaux globaux c, mais je ne veux pas compiler mon projet entier avec le drapeau -marm. Je veux que seulement quelques fichiers .m soient -marm.

Merci et salutations, Kim

+0

Avez-vous regardé le journal de construction pour vous assurer que l'option a été utilisée correctement lorsque Xcode généré la commande de celui-ci? –

Répondre

0

OK, je trouve une solution pour la question.

Voici le commentaire que j'ajouté au code:

// the asm code only works with arm not with thumb, 
// so if you compile it and gcc trys to compile it as thumb 
// you will get an error. 
// to make gcc compile the file as arm and not thumb you need 
// to add -marm to the files compiler config (select the file 
// and press cmd + i and select the build tab and enter there 
// the problem is that if you try to compile for the simulator 
// it will fail, because intel gcc doesnt know the flat -marm. 
// To solve this add a new "User defined setting" in your targets 
// build settings with the name use_marm and give it the value "" 
// then add a build setting condition and select Any iPhone OS 
// Device and give it the value "-marm" 
// In your file's compiler flags add $use_marm 
// If you build for the device it will add -marm and if you 
// build for the simulator it wont.