tutorial make makefile gnu-make

tutorial - GNU makefile cómo y cuándo citar cadenas



gnu make tutorial (1)

¿Cómo y cuándo cito una cadena en un archivo make? ¿Qué es la mejor práctica?

¿Es la siguiente manera de citar?

$(warning $(shell ls -ld "$(CURDIR)" ) )

Estoy familiarizado con Bash, donde usualmente citas variables para permitir espacios incrustados. ¿Lo haces en un makefile?

¿Cómo debo hacer las declaraciones de asignación con una cadena?

vara := "$(CURDIR)" varb := $(CURDIR) varc := /home/me/source vard := "/home/me/source"

¿Qué pasa con el espacio tras el igual?


Nunca debes citar nada por hacer . Make no entiende ni analiza los caracteres de comillas simples o dobles de ninguna manera. Cada carácter de comillas que escriba en un makefile se mantendrá como una cita literal y se pasará como está a los comandos que realizan invocaciones.

Por lo tanto, si el shell espera y puede interpretar una cadena entre comillas, debe usar comillas. Donde el shell no espera o no interpreta correctamente una cadena entre comillas, no debe usar comillas.

En sus ejemplos, si las citas son aceptables o no depende de cómo se usan esas variables. Como anteriormente, make no hará nada especial con comillas, lo que significa que vard (por ejemplo) contiene la cadena literal "/home/me/source" (incluidas las comillas).

Si usa ese valor de una manera en que el shell manejará las cotizaciones por usted, entonces está bien:

all: ; echo $(vard)

imprimirá /home/me/source (sin comillas) porque el shell los interpreta. Pero si usa la variable en un contexto de creación, por ejemplo, como un objetivo o un requisito previo:

all: $(vard) $(vard): ; echo $@

entonces esto no es correcto, porque el objetivo y el requisito previo son las cadenas literales "/home/me/source" (incluidas las comillas).

En general, es mejor no usar comillas alrededor de los nombres de archivo en las variables, y en su lugar agregar las comillas en la receta alrededor de la variable make. Por supuesto, si la variable contiene una secuencia de comandos de shell completa, no solo un nombre de archivo, debe agregar las citas apropiadas a la secuencia de comandos.