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.

Añadiendo argumentos de línea de comandos a un Makefile.

Actualmente estoy escribiendo un archivo Makefile que me permite ejecutar algunos comandos fácilmente, pero quiero ser capaz de pasar argumentos adicionales. No puedo encontrar documentación sobre cómo hacerlo.

Mi Makefile simplificado está abajo:

.PHONY: all

info: header usage

define HEADER

ENCABEZADO DE MI PROYECTO

endef
export HEADER

header:
    @echo "$$HEADER"

usage:
    @echo "make test          Entorno de prueba"

test: header run_test

run_test:
    phpunit

Por el momento, si escribo make test se ejecutará mi suite de pruebas phpunit.

Lo que quiero es poder añadir cualquier argumento adicional después, por ejemplo, make test --filter=thistest … Este argumento se pasaría al comando phpunit, que se vería así phpunit --filter=thistest entre otros argumentos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para permitir que se pasen argumentos adicionales al comando phpunit en el Makefile, se puede usar la función $(filter-out) para filtrar el objetivo y otros argumentos propios del Makefile de los argumentos adicionales pasados en la línea de comando.

    Aquí hay una versión actualizada del Makefile que permite pasar argumentos adicionales:

    .PHONY: all
    
    info: header usage
    
    define HEADER
    ENCABEZADO DE MI PROYECTO
    endef
    export HEADER
    
    header:
        @echo "$$HEADER"
    
    usage:
        @echo "make test          Entorno de prueba"
    
    test: header
        phpunit $(filter-out $@,$(MAKECMDGOALS))
    
    

    En este Makefile actualizado, la declaración $(filter-out $@,$(MAKECMDGOALS)) filtra el objetivo (test) y otros argumentos propios del Makefile de los argumentos adicionales pasados en la línea de comando. Cualquier argumento restante se pasará al comando phpunit.

    Por ejemplo, si ejecuta make test FILTER=thistest, ejecutará phpunit FILTER=thistest.

Comments are closed.