es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Capturar un FALLIDO en una receta en mingw32-make.

Mi archivo makefile de mingw32-make funciona perfectamente bien, pero me gustaría hacer algo que me parecería trivial, es decir, emitir un sonido cuando la última vinculación FALLA.

Mi receta actual es lo suficientemente trivial:

mydll.dll: $(RESFILE) $(OBJFILES)
    $(LINKCALL)
    @echo .
    @echo  ************************** DLL ok **************************
    @echo .

Funciona perfectamente bien, pero me gustaría capturar un posible FALLA del LINKCALL y emitir un sonido, por ejemplo. Pasé algunas horas intentando, pero cualquier otra cosa (que no sea $(LINKCALL)) que pongo en la primera línea de la receta, parece ser enviada LITERALMENTE a un CreateProcess, lo cual, por supuesto, es estúpido y falla.

¿Alguna idea de cómo detectar un fallo (y luego tomar medidas al respecto) en mingw32-make?

¡Gracias!

Tags:  

Answer

  1. Avatar for davy.ai

    Para detectar un fallo en mingw32-make y emitir un pitido, puedes agregar una declaración condicional utilizando la variable especial $?. Esta variable contiene la lista de prerrequisitos que han cambiado y requieren actualización. Cuando $? no está vacío, significa que el enlace ha fallado y puedes usar el comando de consola ‘echo’ con el carácter de campana para emitir un pitido. Aquí tienes un ejemplo de cómo modificar la receta:

    mydll.dll: $(RESFILE) $(OBJFILES)
        $(LINKCALL) || (echo $?\a && exit 1)
        @echo .
        @echo  ************************** DLL ok **************************
        @echo .
    

    En esta receta modificada, el operador ‘||’ se utiliza para ejecutar el comando echo solo si el comando anterior (LINKCALL) falla. El carácter ‘\a’ es el carácter de campana que emite un pitido. El comando ‘exit 1’ se utiliza para detener la receta y devolver un código de estado no nulo, indicando que el enlace ha fallado.

Comments are closed.