target: dependencies
command1
command2
Sur mon système (Mac OS X), make
semble exiger que les Makefiles aient un caractère de tabulation précédant le contenu de chaque command
ligne, ou cela lève une erreur de syntaxe.
C'est un inconvénient lors de la création ou de l'édition de Makefiles car mon éditeur est configuré pour être tout-espace-tout-le-temps.
Pouvez-vous créer des Makefiles valides sans tabulation?
Réponses:
C'est une bizarrerie / exigence de syntaxe
make
, cela n'a rien à voir avec Mac OS X. Malheureusement, vous ne pouvez rien y faire si vous comptez utilisermake
.Edit : GNU Make prend désormais en charge un préfixe de recette personnalisé. Voyez cette réponse .
Vous n'êtes pas le premier à ne pas aimer cet aspect
make
. Pour citer le manuel Unix Haters :la source
.RECIPEPREFIX
). L'une des réponses ci-dessous mentionne également cela et devrait être marquée comme «correcte» au lieu de la mienne. stackoverflow.com/a/21920142Depuis que cette question a été posée à l'origine, une version de GNU Make a été publiée qui vous permet d'utiliser autre chose que Tabcomme caractère de préfixe. À partir de l'annonce de la liste de diffusion :
Cette fonctionnalité a été ajoutée dans GNU Make 3.82, sorti en juillet 2010 (six mois après la date de demande initiale de cette question). Comme cela fait à son tour trois ans et que cela change depuis, il est probable que d'autres saveurs Make aient suivi GNU Make.
la source
Il existe un moyen compliqué d'avoir un fichier Make valide sans onglets.
Si vous changez votre makefile pour lire:
Si cela fonctionnera. Si vous le souhaitez sur plus d'une ligne, vous pouvez faire:
Désordonné, mais ça marche.
la source
.RECIPEPREFIX
est probablement la meilleure approche. Cependant, comme je n'avais pas envie de faire ça, j'ai fini par utiliser une solution basée sur celle-ci. Ligne 1target:\
;command
Si vous avez un vimrc dans votre profil, vous pouvez ajouter cette ligne pour empêcher vim de se transformer en espaces:
Moi aussi, je luttais avec ça, et cela a résolu le problème pour moi. Passez le bon mot!
la source
Cela le fait pour moi si vous souhaitez utiliser des espaces
Exemple
la source
.RECIPEPREFIX
que "Si la variable est vide (comme c'est le cas par défaut ), ce caractère est le caractère de tabulation standard." Cela signifie que la variable est définie par défaut. Il est confirmé en utilisantifeq ($(origin .RECIPEPREFIX), undefined)
. Parce que+=
ajouter un seul espace et les rhs aux lhs,var +=
définitvar
un seul espace (plus une chaîne vide) aussi longtemps que celavar
a déjà été défini. (Sivar
n'est pas défini,+=
est le même que=
.)En mode d'insertion de vim, on peut utiliser
Ctrl-v <TAB>
pour insérer une tabulation littérale, même si vous avez défini la touche de tabulation pour insérer des espaces. Cela ne répond pas à votre question, bien sûr, mais pourrait être une alternative aux méthodes disponibles pour éviter d'avoir besoin d'onglets littéraux.la source
Si vous utilisez EditorConfig , vous pouvez ajouter les lignes suivantes à votre
.editorconfig
fichier pour forcer votre IDE à utiliser tab pour l'indentation au lieu d'espaces dansMakefile
:la source
Jusqu'à GNU Make 4.2
La réponse de Steven Penny fonctionne.
La raison pour laquelle cela fonctionne est décrite dans mon commentaire .
Depuis GNU Make 4.3 (publié le 19 janvier 2020)
Le comportement de l'
+=
opérateur a été modifié d'une manière rétrocompatible. Si l'opérande de gauche a une valeur vide, un espace n'est plus ajouté.Vous pouvez à la place utiliser
, où
<space>
est un seul espace. Bien qu'il$(.RECIPEPREFIX)
soit développé comme une valeur vide, cela est nécessaire pour ne pas laisser GNU Make ignorer<space>
. Notez que ce code fonctionne même sur GNU Make antérieur à la version 4.3.la source
dans ubuntu: vi Makefiles remplace l'espace par tabulation (ou tout ce que vous voulez):
Par ex, remplacez 8 espaces par tabulation:
Attention: ^ j'insère avec la touche de tabulation, pas ^ et I caractères: D
la source
Pas transférable. Certaines versions de make nécessitent absolument des tabulations. Encore une autre raison de préférer les tabulations aux espaces :-)
la source