3 votes

Quel est le caractère utilisé pour mettre en retrait la recette de la règle du fichier Make ?

J'utilise gnu make et dans un Makefile que j'ai, je vois la règle suivante. Je veux ajouter une règle similaire avec une recette, mais quand j'ajoute une règle et sa recette sur la ligne suivante en donnant une tabulation ou un espace pour la recette, j'obtiens une erreur de make.

dummy :
    @echo $(OBJS)

Quand j'ai activé la commande vim :set list , je vois :

dummy :$
^I@echo $(OBJS)$

Quels sont exactement les caractères qui précèdent la ligne de recette (deuxième ligne) et qui l'indentent du début de la ligne ?

Comment les saisir au clavier (sans avoir à copier-coller la règle existante et à la modifier) ?

Où puis-je trouver des informations sur les différents espaces/indents à utiliser pour créer un Makefile depuis le début, à la main (pas un makefile créé par automake ou un autre outil) ?

9voto

DMA57361 Points 18266

Les recettes dans un makefile debe être précédé d'une seule norme tab le personnage, rien d'autre.

^I est la représentation du caractère tabulation (voir le tableau sur le site Wikipedia ASCII ), et cela devrait donc être correct.

Vous devriez donc être en mesure de le saisir en utilisant Tab o Ctrl + I .
(en supposant qu'ils ne sont pas remappés par le logiciel)


Modifier

Après une enquête plus approfondie, il semble que vous peut modifier le caractère qui doit précéder toutes les lignes de recettes à partir d'une tabulation en définissant le paramètre .RECIPEPREFIX variable spéciale .

Si cette valeur a été définie dans votre makefile, toutes les recettes après la définition doit utiliser ce caractère au lieu d'une tabulation.

2voto

goldenmean Points 2307

Après avoir pris quelques conseils dans la réponse donnée par DMA57361 ci-dessus, et après quelques manipulations, j'ai remarqué qu'il y a longtemps, dans mon .vimrc, j'avais cette commande set expandtab (Il transforme les tabulations en espaces) et j'utilise vim.

Cela gâchait le caractère Tab que je saisissais dans les règles de mon Makefile. La mise en commentaire de cette ligne dans .vimrc m'a aidé et cela fonctionne pour moi.

2voto

Louis Points 31

A la lumière de la réponse acceptée : les recettes doivent être précédées d'un tab qui est automatiquement remplacé si set expandtab est activé dans votre .vimrc . L'écrasement de votre .RECIPEPREFIX n'est pas recommandé, car cela casse les makefiles des bases de code que vous avez téléchargées. L'approche naïve est de simplement supprimer set expandtab de votre configuration, mais vous pouvez contourner cela en ajoutant la ligne

autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab .

Cela désactive expandtab seulement lorsque vous éditez un makefile.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X