Как отменить код ошибки в Makefile

Я являюсь пользователем Fedora и поэтому собираюсь рекомендовать ее. По умолчанию ISO рабочего стола Fedora - это Live-образ с GNOME 3 в качестве DE.

Но у вас есть ряд других вариантов.

3
29.05.2018, 14:49
3 ответа

¿Qué tal esto?

skipped_tests:
    @! grep -E 'iit|ddescribe' spec/terminalSpec.js
3
27.01.2020, 21:13

He resuelto el problema llamando a grep dos veces

skipped_tests:
    @grep -E 'iit|ddescribe' spec/terminalSpec.js || true
    $(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)

¿hay una mejor manera?

Probé algunas otras cosas, pero parece que make está operando en cadenas (use str.replace en Makefile o algo así )porque si la salida de grep es una línea de código fuente, da un error de sintaxis de otro posible soluciones.

2
27.01.2020, 21:13

Posible solución:

Defina la variable en la parte superior de Makefiley use ifeq. Por ejemplo:

RESULT = $(shell grep... 2>/dev/null && echo 0 || echo 1)
...
skipped_tests:
ifeq ($(RESULT),0)
   ...
endif

Pero grepse ejecutará en cada llamada de make, incluso si las pruebas omitidas _no están llamando. Si ese objetivo se llama cada vez, entonces también es una solución.


Teniendo en cuenta sus deseos. Si desea usar el resultado grepen el objetivo varias veces, puede usar una expresión de varias líneas. Supongamos que tengo el siguienteMakefile:

all: target

target:
    @res=`grep -E 'test|pttern' test.js` || { res="" ; : ; } ; \
        [ ! -z "$$res" ] && echo "Grep result: $$res" ; \
        ls ; \
        [ ! -z "$$res" ] && echo "Grep result: $$res" ; \
    :

.PHONY: target

y tengo el siguiente test.jsen el mismo directorio:

$ cat test.js
pattern

Si el patrón no coincide, habrá el siguiente resultado:

$ make
Makefile  test.js

Si el patrón existe, habrá el siguiente resultado:

$ make
Grep result: pattern
Makefile  test.js
Grep result: pattern

Para facilitar la lectura, puede cambiar ``con res=$$(grep -E...) ||....

Por supuesto, no es muy conveniente hacer comandos multilínea en una llamada al sistema (esta multilínea es una sesión de intérprete )pero a veces puede ser útil en casos en los que necesita operar una variable (variable de entorno también ).

1
27.01.2020, 21:13

Теги

Похожие вопросы