Estoy usando gnu make y en un Makefile que tengo, veo la siguiente regla. Quiero agregar una regla similar con una receta, pero cuando agrego una regla y su receta en la siguiente línea al darle una pestaña o espacio para la receta, aparece un error.
dummy :
@echo $(OBJS)
Cuando encendí el comando vim: set list, veo:
dummy :$
^I@echo $(OBJS)$
¿Cuáles son exactamente los caracteres antes de la línea de la receta (segunda línea) que la sangran desde el inicio de la línea?
¿Cómo los ingreso usando el teclado (sin tener que copiar, pegar la regla existente y luego modificarla?
¿Dónde puedo encontrar información sobre varios espacios/sangrías que se utilizarán al crear un Makefile desde el principio, a mano (no es un archivo MAKE creado automáticamente u otra herramienta)?
Respuesta1
Recetas en un makefiledebeestar precedido por un único tab
carácter estándar, nada más.
^I
es la representación del carácter de tabulación (consulte la tabla en WikipediaASCIIpágina), y por lo tanto esto debería ser correcto.
Entonces deberías poder ingresarlo usando Tabo Ctrl+ I.
(suponiendo que el software no los reasigne)
Editar
Si investigamos más a fondo, parece que ustedpodercambie el carácter requerido para preceder a todas las líneas de receta de una pestaña configurando el.RECIPEPREFIX
variable especial.
Si este valor se ha definido en su archivo MAKE, todas las recetasdespuésla definición debe usar ese carácter en lugar de una tabulación.
Respuesta2
Después de seleccionar algunos consejos de la respuesta dada por DMA57361 arriba, y un poco más de manipulación, noté que hace mucho tiempo en mi .vimrc tenía este comando set expandtab
(expande las pestañas en espacios) y uso vim.
Esto estaba estropeando el carácter Tab que estaba ingresando en mis reglas de Makefile. Comentar esa línea en .vimrc me ayudó y está funcionando para mí.
Respuesta3
A la luz de la respuesta aceptada: las recetas deben ir precedidas de un tab
carácter, que se reemplaza automáticamente si set expandtab
está habilitado en su archivo .vimrc
. No se recomienda sobrescribir el suyo .RECIPEPREFIX
, ya que esto rompe los archivos MAKE en las bases de código que descargó. El enfoque ingenuo es simplemente eliminar set expandtab
de su configuración, pero puede solucionar esto agregando la línea
autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
.
Esto se desactiva expandtab
sólo cuando estás editando un archivo MAKE.