Respuesta
[email protected] The file name of the target.
$< The name of the first dependency.
Para más detalles: Makefile symbol reference
El enlace ya no funciona –
[email protected]
es el nombre del objetivo que se construye - el archivo de programa o el objeto se está creando.
$<
es el nombre del archivo que hizo que se reconstruyó es el nombre del archivo 'cuya existencia permite la regla de inferencia que se eligió para el objetivo'.
En el ejemplo, es posible que tenga:
program.o: program.c
${CC} ${CFLAGS} -c -o [email protected] $<
En este caso, es [email protected]
'program.o' y $<
es 'program.c'. (La regla debe generar un archivo de objeto debido a la opción '-c
').
Tenga cuidado '$ <'; si hubiera un encabezado que fuera más reciente que el programa, '$ <' coincidiría con eso, y entonces la línea de compilación no funcionaría. Como se muestra, es lo suficientemente seguro, sin embargo.
Beta comentarios sobre '$ <' ...
La definición POSIX de 'hacer' dice:
$<
En una regla de inferencia, la $ < macro evaluará el nombre de archivo cuya existencia permitió la inferencia regla para ser elegido para el objetivo. En la regla .DEFAULT, la macro $ < evaluará el nombre del objetivo actual. El significado de la macro $ < no estará especificado.
Por ejemplo, en la regla de inferencia .c.a, $ < representa el archivo .c de requisito previo.
Así, en el ejemplo que di, '$ <' es técnicamente 'sin especificar'. Y, en el contexto correcto, que serían:
.c.o:
${CC} ${CFLAGS} -c -o [email protected] $<
Entonces '$ <' es incondicionalmente 'progname.c' cuándo 'progname.o' se está construyendo.
Algunas versiones de 'hacer' solían hacer cosas raras con él; tanto GNU Make (3.81) como Solaris 10 parecen comportarse de manera sensata. Estoy atrapado en una distorsión del tiempo, sospecho. He utilizado el siguiente makefile:
all: x.o
x.o: x.c
${CC} ${CFLAGS} -c -o [email protected] $<
x.o: x.h
utilicé 'echo "int main(){return 0;}" > x.c
' y 'echo > x.h
' para crear el código.No importaba qué archivo fuera borrado de 'x.c' y 'x.h'; de cualquier manera, la compilación fue 'correcta'. Tengo un viejo derivado de marca que fue, alrededor de 1992, compatible con Sun MAKE de la época en la mayoría de los aspectos, que lo maneja mal.
El séptimo Manual de Edición UNIX programador dice:
La regla para crear un archivo con el sufijo s2 que depende de un archivo de nombre similar con el sufijo s1 se especifica como una entrada para el ' objetivo 's1s2. En dicha entrada, la macro especial $ * representa el nombre de destino con el sufijo eliminado, $ @ para el nombre de destino completo, $ < para la lista completa de requisitos previos y $? para la lista de requisitos previos que están desactualizados.
No dice nada sobre lo que significa fuera de ese contexto. Noto que la 7ma edición 'make' mostraría tanto 'x.c' como 'x.h' para '$ <' - pero POSIX dice que es incorrecta.
The Sun "hacer Guía del usuario" (Revisión A, de 16 de marzo de 1987) dice:
$<
El nombre del archivo de la dependencia, como si seleccionada pormake
para su uso con una regla implícita.
Que más o menos se ajusta a lo que ahora se ve.
Oh bueno, tal es la vida; las cosas cambian a tu alrededor. A veces lo ves sucediendo; a veces no.
- 1. ¿Qué representan $ <y $ @ en un Makefile?
- 2. ¿Qué significa CC? = En un Makefile?
- 3. ¿Qué significa comodín en makefile?
- 4. Makefile: mostrar y ejecutar
- 5. ¿Qué son: + y &: + en Ruby?
- 6. ¿Qué significa $$ @ y el símbolo de tubería en Makefile?
- 7. ¿Qué significa @: (en el símbolo dos puntos) en un Makefile?
- 8. ¿Por qué son TGeneric <Base> y TGeneric <Descendant> tipos incompatibles?
- 9. qué significa $ <y $ @ en el archivo
- 10. ¿En qué casos son IEnumerable <T>. ¿Optimizado?
- 11. ¿Qué hace el doble símbolo "at" (@@) en un Makefile?
- 12. ¿Qué son las cookies firmadas y por qué son útiles?
- 13. un diccionario Makefile
- 14. ¿Qué significa ">>" y "<<" en Javascript?
- 15. GNU Makefile y bash - escapar
- 16. Makefile, Pattern-Rules y Directories
- 17. Escapar en el Makefile
- 18. Referencia de LaTeX y Makefile
- 19. ¿Cómo copiar un directorio en un Makefile?
- 20. ¿Qué son SO_SNDBUF y SO_RECVBUF
- 21. ¿Qué son "cerr" y "stderr"?
- 22. ¿Cuáles son las diferencias entre "=" y "<-" en R?
- 23. NSComparisonResult y NSComparator: ¿qué son?
- 24. Cómo usar sed en un Makefile
- 25. Makefile para CUDA y C
- 26. ¿Por qué son Func <> y Expresión <Func<>> Intercambiables? ¿Por qué uno trabaja en mi caso?
- 27. ¿Qué son ReservedCodeCacheSize y InitialCodeCacheSize?
- 28. ¿Qué son paddingStart y paddingEnd?
- 29. ¿Debo nombrar "makefile" o "Makefile"?
- 30. ¿Qué son _Unwind_SjLj_Unregister y _Unwind_SjLj_Register?
¿Qué documentación ha leído en 'make'? http://www.makelinux.net/make3/make3-CHP-1-SECT-5.html? http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html? ¿Algo? –