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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top