Quelle est la différence entre -I et-L dans le makefile?
Qu'est-ce que l'utilisation de l'-I et-L drapeaux dans un makefile?
- Jinx, étiez-vous posant des questions sur les options en $LDFLAGS ou comme un commutateur pour le faire, comme dans tout cela? faire -l
- ancien, mais l'option est capital " je "et non "l'.
Vous devez vous connecter pour publier un commentaire.
Ces sont généralement dans le cadre de la liaison de la ligne de commande, et sont livrés directement dans une cible d'action, ou plus communément attribué à un
make
variable qui sera étendu à d'formulaire de commande de liaison. Dans ce cas:-L
est le chemin d'accès au répertoire 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 mettre un lien vers la bibliothèque
~/libs/libabc.a
vous ajoutez:Pour tirer parti de la valeur par défaut règle implicite pour les liens, ajouter ces indicateurs pour la variable
LDFLAGS
, comme dansC'est une bonne habitude de séparer
LDFLAGS
etLIBS
, par exempleMême si elle peut travailler autrement, le
-l...
directives sont censés aller après les objets qui font référence à ces symboles. Certaines optimisations (-Wl,--as-needed
est le plus évident) échouera si la liaison se fait dans le mauvais ordre.Vraiment grok un makefile, vous devez également avoir une bonne compréhension des lignes de commande pour tous les composants de votre projet de la chaîne. Des Options comme
-I
et-L
ne sont pas comprises par faire de lui-même. Plutôt, faire est d'essayer de créer une ligne de commande à exécuter un outil pour transformer une condition préalable à un fichier dans un fichier cible.Souvent, c'est un C ou C++ source file en cours de compilation d'un fichier de l'objet, et éventuellement lié à un fichier exécutable.
Dans ce cas, vous devez consulter le manuel de votre compilateur, et en particulier les bits liées aux options de ligne de commande, il le comprend.
Tout ce que dit, en termes génériques, les options sont assez standard entre les compilateurs et les linkers.
-I
ajoute un répertoire à la liste des lieux recherchés par le compilateur pour un fichier nommé sur un#include
ligne, et-L
ajoute un répertoire à la liste des lieux recherchés par l'éditeur de liens pour une bibliothèque avec le nom-l
option.La ligne de fond est que la "langue" d'un makefile est une combinaison de la syntaxe du fichier makefile lui-même, de votre shell que sait faire (généralement
/bin/sh
ou quelque chose de similaire), commune de commandes du shell (commerm
,cp
,install
, etc.), et les commandes spécifiques à votre compilateur et l'éditeur de liens (par exemple, en tapantgcc -v --help
à votre invite de l'interpréteur de vous donner presque au complet (et très longue) liste des options comprises par gcc comme un point de départ).Une chose à noter est que les options suivantes sont passés au compilateur/linker.
Donc, vous devriez être en regardant le compilateur homme pages/documentation pour connaître leur rôle.