La diferencia entre un makefile de Linux con un script de conexión y uno sin un script de conexión
Los scripts de Shell se pueden llamar en Makefiles, pero los Makefiles y los scripts de Shell son diferentes. Este artículo intenta resumir las diferencias entre Makefiles y scripts de shell.
1. Todas las referencias a variables que comienzan con $ en el shell deben ir seguidas de {}, mientras que las variables en el Makefile deben ir seguidas de (). Un ejemplo es el siguiente:
Makefile
PATH="/data/"
SUBPATH=$(PATH)
Shell
PATH="/data/"
SUBPATH=${PATH}
2. Todas las palabras que comiencen con $ en el Makefile se interpretarán como variables en el Archivo Make. Si necesita llamar a una variable en el shell (o la posición de anclaje $ en una expresión regular), debe agregar dos signos $ ($$). Los ejemplos son los siguientes:
PATH="/data/"
todos:
echo ${PATH}
echo $$ Ejemplo de PATH El primer ${PATH} se refiere a la variable en el Makefile, no a la variable de entorno PATH en el Shell. La última se refiere a la variable de entorno PATH en el Shell.
3. Diferencias en los caracteres comodín
El comodín * en Shell representa todos los caracteres
El carácter comodín en Makefile representa todos los caracteres
4. En Makefile, el script de Shell solo se puede llamar en el destino y no se puede generar en ningún otro lugar. Por ejemplo, el siguiente código no produce ningún resultado:
VAR="Hello"
echo "$VAR"
all:
.. ...El código anterior no se generará en ningún momento y no está dentro del objetivo si el código anterior se cambia a lo siguiente:
VAR="Hola"
.todos:
echo "$VAR"
....El código anterior ejecutará el comando echo al crear todo.
5. Ejecute el comando Shell en el Makefile y cree un proceso para su ejecución en una línea. Esta es también la razón por la que muchas líneas en muchos Makefiles terminan con "; \" para garantizar que el código sea una línea en lugar de varias líneas, de modo que el Makefile pueda ejecutarse en un proceso, por ejemplo:
SUBDIR = ejemplo de origen
todos:
@for subdir in $(SUBDIR \
do\
echo "edificio"; \
doneComo puede ver en lo anterior, cada línea en el bucle for termina con "; \".
6. Obtener el directorio actual
PATH=`pwd` Tenga en cuenta que es ``, no ''
Se recomienda leerlo o aprenda esto en Linux, específicamente Acerca de este capítulo, dirección 3w(punto)linuxprobe(punto)com.