Quelle est l'utilisation des indicateurs -I et -L dans un fichier makefile?Quelle est la différence entre -I et -L dans makefile?
Répondre
Elles font généralement partie de la ligne de commande de l'éditeur de liens et sont fournies directement dans une action cible, ou plus généralement affectées à une variable make
qui sera développée pour former une commande de liaison. Dans ce cas:
-L
est le chemin d'accès aux répertoires contenant les bibliothèques. Un chemin de recherche pour les bibliothèques.
-l
est le nom de la bibliothèque que vous souhaitez lier.
Par exemple, si vous souhaitez créer un lien vers la bibliothèque ~/libs/libabc.a
vous souhaitez ajouter:
-L$(HOME)/libs -labc
Pour bénéficier de la règle par défaut implicite pour relier, ajouter ces drapeaux à la variable LDFLAGS
, comme dans
LDFLAGS+=-L$(HOME)/libs -labc
Il est une bonne habitude de séparer LDFLAGS
et LIBS
, par exemple
# LDFLAGS contains flags passed to the compiler for use during linking
LDFLAGS = -Wl,--hash-style=both
# LIBS contains libraries to link with
LIBS = -L$(HOME)/libs -labc
program: a.o b.o c.o
$(CC) $(LDFLAGS) $^ $(LIBS) -o [email protected]
# or if you really want to call ld directly,
# $(LD) $(LDFLAGS:-Wl,%=%) $^ $(LIBS) -o [email protected]
Même si elle peut fonctionner autrement, les -l...
directives sont censées aller après les objets qui font référence à ces symboles. Certaines optimisations (-Wl,--as-needed
est la plus évidente) échoueront si la liaison est effectuée dans le mauvais ordre.
https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html: LDFLAGS Drapeaux supplémentaires à donner aux compilateurs lorsqu'ils sont censés invoquer l'éditeur de -L. Les bibliothèques (-lfoo) doivent être ajoutées à la variable LDLIBS à la place. > LDLIBS Drapeaux de bibliothèques ou noms donnés aux compilateurs lorsqu'ils sont supposés appeler l'éditeur de liens, 'ld'. LOADLIBES est une alternative obsolète (mais toujours supportée) à LDLIBS. Les indicateurs de liens de non-bibliothèque, tels que -L, doivent figurer dans la variable LDFLAGS. –
Une chose à noter est que ce sont les options passées au compilateur/éditeur de liens. Vous devriez donc regarder les pages de manuel du compilateur/documentation pour connaître leur rôle.
Pour vraiment créer un fichier makefile, vous devez également avoir une bonne compréhension des lignes de commande pour tous les composants de la chaîne d'outils de votre projet. Des options telles que -I
et -L
ne sont pas comprises par le fabricant. Au contraire, make tente de créer une ligne de commande qui exécutera un outil pour transformer un fichier prérequis en un fichier cible.
Souvent, il s'agit d'un fichier source C ou C++ compilé dans un fichier objet, et éventuellement lié pour obtenir un fichier exécutable.
Dans ce cas, vous devez voir le manuel de votre compilateur, et en particulier les bits liés aux options de ligne de commande qu'il comprend.
Tout cela dit en termes génériques, ces options spécifiques sont assez standard parmi les compilateurs et les linkers. -I
ajoute un répertoire à la liste des lieux recherchés par le compilateur pour un fichier nommé sur une ligne #include
, et -L
ajoute un répertoire à la liste des lieux recherchés par l'éditeur de liens pour une bibliothèque nommée avec l'option -l
.
L'essentiel est que la « langue » d'un makefile est une combinaison de la syntaxe du makefile lui-même, votre coquille comme on le sait faire (habituellement /bin/sh
ou quelque chose de similaire), des commandes shell communes (telles que rm
, cp
, install
, etc.), et les commandes spécifiques à votre compilateur et éditeur de liens (par ex.taper gcc -v --help
à l'invite de votre shell vous donnera une liste presque complète (et extrêmement longue) des options comprises par gcc comme un point de départ).
Je ne sais toujours pas quelle est la manière la plus efficace de représenter le drapeau -I? -L peut être traduit en LDFLAGS. – Edmon
- 1. Quelle est la différence entre dict() et {}?
- 2. quelle est la différence entre:.! et: r !?
- 3. Quelle est la différence entre = et: =
- 4. Quelle est la différence entre Int et Integer dans Scala?
- 5. Quelle est la différence entre% Q et% {} dans ruby?
- 6. Quelle est la différence entre // et /// dans Visual Studio?
- 7. Quelle est la différence entre memset et memcpy dans C
- 8. Quelle est la différence entre latin1_general_ci et utf8_bin dans MYSQL
- 9. Quelle est la différence entre utf8_general_ci et utf8_unicode_ci dans MySql?
- 10. Quelle est la différence entre bcc32 et bcc32ide dans Borland?
- 11. Dans ASP.Net, quelle est la différence entre <% = et <% #
- 12. Quelle est la différence entre rediriger et rendre dans CakePHP?
- 13. Quelle est la différence entre DOCUMENT_URI et URI_REQUEST dans SSI?
- 14. Quelle est la différence entre% c et% C dans printf?
- 15. Quelle est la différence entre include et extend dans Ruby?
- 16. Quelle est la différence entre rediriger et transférer dans Symfony?
- 17. Quelle est la différence entre AddConcreteType et TheDefaultIsConcreteType dans StructureMap?
- 18. jQuery: Quelle est la différence entre '$ (this)' et 'this'?
- 19. Howto incorporer -I makefile
- 20. Quelle est la différence entre this.click() et $ (this) .click()?
- 21. Stange -I effet avec make et bad -L
- 22. WCF - Quelle est la différence entre Binding.RecieveTimeout et Binding.ReliableSession.InactivityTimeout?
- 23. Quelle est la différence entre SqlCommand.CommandTimeout et SqlConnection.ConnectionTimeout?
- 24. Quelle est la différence entre find-grep et grep-find?
- 25. Quelle est la différence entre ItemTemplate et ItemPanelTemplate?
- 26. Quelle est la différence réelle entre MVC et MVC Model2
- 27. Quelle est la différence entre IContainer et IUnityContainer de Prism?
- 28. Quelle est la différence entre Keyboard.Focus (point) et item.Focus()?
- 29. Quelle est la différence entre XML-RPC et SOAP?
- 30. Quelle est la différence entre Page.IsPostBack et Page.IsCallBack?
Jinx, demandiez-vous des options dans $ LDFLAGS ou comme un commutateur pour faire, comme dans ce? make -l –
@ Nathan..le premier, mais l'option est capitale 'i' pas 'l'. – MainID