Comment remplacer LD variable dans un fichier Makefile pour le lien C objets
Je suis en train d'écrire un Makefile pour C. je veux être en mesure de spécifier les différents programmes pour la compilation et la liaison via les variables d'environnement. Cependant, je veux qu'il fonctionne sans aucune des variables supplémentaires. J'ai été tenté de faire le lien avec ld. Cependant, le défaut n'a pas de lien avec la bibliothèque standard C.
La question:
Comment lier un programme C avec ld ou $LD
Est-il possible d'obtenir des indicateurs appropriés à partir de cc?
Je ne peux pas utiliser $(CC)
en place de $(LD)
. Le LD ?= cc
ne fonctionne pas trop.
Je veux quelque chose de ce genre pour être vrai:
La variable d'environnement CC à la stc.
La variable d'environnement LD unset.
Mon Makefile compiler à l'aide de la stc et de lien à l'aide du système par défaut de l'éditeur de liens pour C.
Malheureusement, certains compilateurs C sont pas en mesure de lier certaines bibliothèques. J'ai ce problème avec la stc et glfw.
P. S.
Utilisateur de Linux
LD
...OriginalL'auteur Michas | 2012-01-01
Vous devez vous connecter pour publier un commentaire.
La cession conditionnelle $(LD) ?= cc ne peut pas fonctionner, car $(LD) est prédéfini.
Si vous voulez commencer à faire sans les variables prédéfinies, utilisez l'option-R:
OriginalL'auteur Matthias
Au lieu d'utiliser ld comme l'éditeur de liens, l'utilisation de gcc ou g++. Ils ajouter les options de ligne de commande pour obtenir les bibliothèques et le code de démarrage, etc. En d'autres termes:
est équivalent à:
sauf que gcc ajoute tous les paramètres de ligne de commande lors de l'appel à ld.
En d'autres termes: LD=gcc.
if (is_unset($(LD))) LD = gcc endif
LD ?= gcc travaille trop.
Vous ne devriez pas utiliser
$(LD)
lors de la liaison d'un programme C. Vous devez utiliser$(CC) $(LDFLAGS)
à la place.Wirzenius Il ne fonctionne pas pour certaines bibliothèques, si $(CC) == stc
vous devriez probablement comprendre pourquoi pas, dans ce cas.
OriginalL'auteur Richard Pennington
L'une des principales caractéristiques de la stc est que :
Il n'y a plus de détails dans cci de la documentation, il dit à propos de la liaison :
Cela signifie que, si vous souhaitez utiliser la cci, vous aurez besoin de lien avec la cci.
OriginalL'auteur Coren
Comme je vois, vous pouvez définir une règle dépendant de valeurs pour les variables.
Et de le construire par l'appel de la règle appropriée.
Si vous le souhaitez, en revanche, être capable de passer à l'arbitraire d'un compilateur de la chaîne, vous devez avoir un certain resctrictions de toute façon.
La règle:
Implique que votre construction doit être faite en deux étapes et les règles respectives (
compile_arbitrary
etlink_arbitrary
) doit obéir à la même ligne de commande.De sorte que vous pouvez invoquer
make
personnaliséCC
etLD
variables:Enfin, vous pouvez ajouter un sale vérifier
LD
étant vide dans l'éditeur de liens étape, et seulement effectuer si elle n'est pas.Afin que vous pouvez utiliser
build_with_arbitrary
même pour un compilateur qui fait tout en une seule étape juste en passant:J'espère avoir bien compris votre question. Désolé si j'ai mal compris, et s'il vous plaît dites-moi si je me trompe.
OriginalL'auteur j4x