Je travaille dans un système embarqué (RTXC) où j'ai besoin de désactiver la fonctionnalité du débogueur qui est activée via une commande #define. Cependant, quand je change le #define en undefine, la compilation se passe bien, mais quand le linker s'exécute, il rencontre une erreur au sujet d'un symbole qui n'existe pas et qui appartient au code de débogage (qui aurait dû être pris en charge par la variable debugger étant défini). Est-il possible pour Make de s'assurer qu'une variable de préprocesseur n'est pas définie ou reste indéfinie?Peut-on annuler la définition d'une variable?
Répondre
La réponse à votre question est non, Make ne peut absolument pas empêcher une variable d'être définie par, disons, une expression #define dans le code.
Vous semblez avoir un problème insaisissable. Cela pourrait être un bug dans vos Makefiles, une directive mal orthographiée, une mauvaise macro (si vous pardonnez la tautologie) ou quelque chose de trivial. Je suggère de brûler la forêt: découper tout jusqu'à ce que le problème s'arrête, puis voir où il se cachait. Si vous arrivez à HelloWorld et que le problème persiste, faites-le nous savoir.
Non. Vous devrez corriger le bogue dans votre code. Plus précisément, il y a quelque chose qui fait référence au côté de débogage des choses en dehors d'un #ifdef. Make ne pourra pas vous aider là-bas.
Une autre possibilité est que vous avez un .o ou quelque chose qui reste d'une construction précédente; vous pourriez vouloir essayer de nettoyer l'arbre de construction.
Malheureusement, j'ai fait ces deux et le problème de liaison persiste encore. J'ai vérifié chaque utilisation de la variable et j'ai vérifié qu'ils sont tous inclus dans des blocs #ifdef, et je m'assure que chaque a, o, et ainsi construit par le projet est effacé du répertoire de construction (et/ou construit frais). Merci pour votre réponse néanmoins –
@Alex Marshall: Est-ce que votre compilateur ne vous dit pas d'où provient la référence insatisfaite (premier emplacement, habituellement)? Avez-vous exécuté 'nm -g' sur les fichiers objets ou les bibliothèques pour les localiser? –
@Jonathan Leffler: J'utilise un système d'exploitation embarqué, RTXC. Le compilateur m'indique que le problème provient d'une des librairies du noyau: librtxc.a. 'nm -g librtxc.a' m'indique que la référence est dans rtxcasm.o. Les bibliothèques sont recompilées à partir de zéro avec la variable CBUG étant indéfinie, mais en quelque sorte une référence à _isrcnt reste. J'ai vérifié toutes les références à isrcnt, et elles sont toutes correctement entourées de balises #ifdef CBUG, donc je ne vois pas pourquoi un symbole _isrcnt devrait être compilé dans le fichier objet rtxcasm.o. Incidentiellement, merci pour 'nm -g', je ne le savais pas –
- 1. Définition de variable SQLPlus
- 2. Définition dynamique de la variable d'instance
- 3. Définition d'une variable XSLT en tant que variable JavaScript?
- 4. Java tableau annoncez dehors définition de la variable
- 5. Définition d'une variable basée sur la classe CSS dans jQuery
- 6. Définition d'une variable d'environnement en javascript
- 7. Annuler dans la sélection?
- 8. Définition d'une variable à partir d'un exécutable
- 9. Définition « variable globale » dans Django templates
- 10. Définition d'une variable d'instance dans l'initialisation
- 11. Annuler la publication de contrôle
- 12. DataTable Annuler la ligne Supprimer
- 13. WPF/XAML/C# Définition d'une variable booléenne sur MouseOver
- 14. Powershell: Définition d'une variable d'environnement pour une seule commande uniquement
- 15. Définition du numéro de ligne à une variable dans Emacs
- 16. Annuler form.submit()
- 17. Définition d'un problème de variable d'environnement Java sur Ubuntu
- 18. Comment annuler la dernière case cochée?
- 19. Annuler la fonctionnalité dans un href
- 20. annuler la commande supprimée dans bash
- 21. Comment annuler la suppression de l'écho local
- 22. Annuler la création d'une classe en PHP
- 23. Django transaction.commit_on_success ne pas annuler la transaction
- 24. Où annuler Application.OnTime dans VBA
- 25. Hudson annuler ne pas annuler tous les processus
- 26. annuler ou annuler l'appel ajax dans ie 6,7,8
- 27. utilisant le mot clé statique dans c objectif lors de la définition d'une variable cache
- 28. Interruption de Firebug lors de la définition d'une variable globale x
- 29. Bouton Annuler dans UITextfield
- 30. Annuler événement jQuery manipulation
s'il vous plaît modifier ces balises, "faire", "définir", "undef" ne sont pas bonnes étiquettes SO. –
@Amr: Je suis d'accord sur define et under, mais make est un bon tag SO, puisqu'il fait référence à un outil spécifique. – Brian