finalización Bash para hacer con los objetivos genéricos en un Makefile
-
21-08-2019 - |
Pregunta
Tengo un Makefile donde la mayor parte de mis objetivos son creados de forma genérica a través de una secuencia de lata. Parece que la finalización fiesta sólo sugiere terminaciones para los objetivos normales, por ejemplo.
target_name:
#$@
y no para objetivos genéricos. ¿Hay alguna manera de hacer finalización fiesta de completar todos los objetivos, a pesar de que no se explicitan que el ejemplo anterior? Para ser más spesific, digamos que definir una lista de nombres de destino, y hacer algo como esto:
list=target1 target2
$(list):
#$@
¿Hay alguna manera de hacer que estos objetivos disponibles para la terminación fiesta? O, digamos incluso más avanzados que tengo dos listas y quiero que los objetivos que se harán de todas las combinaciones posibles de los elementos de las dos listas. ¿Puedo también tener estos objetivos disponibles para la terminación fiesta?
Solución
$ make -qp | grep '^[^.#].*: ' all: bin1 bin2 bin3 bin1: obj1.o obj2.o obj3.o obj1.o: obj1.c obj1.h ... $ make -qp | sed -n -e 's/^\([^.#[:space:]][^:[:space:]]*\): .*/\1/p' all bin1 obj1.o ...
Los -q
previene Realizar de ejecutar realmente nada, y el -p
pide a volcar su base de datos.
Entonces todo lo que tiene que hacer es escribir y registrar un función de finalización ( ejemplo ).
Otros consejos
No hay una solución de trabajo, que yo sepa.
Este comando:
make -qsp 2>/dev/null | egrep '^[^#%\.=]*:[^=]' | awk -F ': ' '{ print $2}'
ampliará sus objetivos makefile.
Usted puede tratar de agregarlo a su /etc/bash_competion
, pero creo que va a necesitar más de depuración para hacer frente a las situaciones más complejas.