2010-03-17 8 views
7

Parece que no es posible llamar a los comandos del sistema de Windows (por ejemplo, del, mover, etc.) utilizando GNU Make. Intento crear un archivo MAKE que no dependa del usuario que tenga instaladas herramientas adicionales (por ejemplo, rm.exe de Cygwin).Llamar a comandos de Windows (por ejemplo, del) de un archivo MAKE

Cuando se ejecuta la siguiente regla, se notifica un error del: command not found:

clean: 
    del *.o 

Esto es probablemente porque no hay execuatable como "del". También he intentado ejecutarlo como una opción para cmd pero con esto sólo parece abrir un nuevo indicador:

clean: 
    cmd /C del *.o 

estoy usando Windows XP (5.1.2600) con GNU Make 3.79.1 que se incluye como parte de MSys.

+0

¿has probado 'rm'? – hasen

+0

¿Qué versión de windows estás usando? – hlovdal

Respuesta

9

Parece que el interruptor /C debe ser escapado porque / se interpreta como una ruta en GNU Make. Los siguientes funciona como se espera: Respuesta

clean: 
    cmd //C del *.o 
3

¿Estás usando Cygwin? ¿Por qué no llamar al rm?

+2

Estoy escribiendo un archivo MAKE para ir a máquinas de otros usuarios que pueden no tener Cygwin/rm. – TomLongridge

3

del es un comando integrado de cmd.exe (así como anteriormente command.com). Su comando cmd /C del *.o debería funcionar, si se inicia un nuevo símbolo del sistema sospecho que cmd podría ser un contenedor. ¿Ha intentado llamar a cmd con su ruta completa (por ejemplo, c: /WINDOWS/system32/cmd.exe)?

+0

No inicia una nueva ventana de símbolo del sistema, imprime el titular de derechos de autor MS y luego se detiene. Usar la ruta completa no tiene ningún efecto. – TomLongridge

+0

Intenta citar el comando (es decir, cmd/C "del * .o") - si no funciona, prueba cmd/K para ver cuál es el error (/ K mantendrá la ventana del cmd hasta que la cierres) –

+0

Curiosamente, funciona con 'cmd/K del * .o' pero te deja en la nueva sesión y solo continuará con el archivo MAKE cuando escribas 'exit'. Citar no parece hacer ninguna diferencia. – TomLongridge

0

Tom de Longridge estaba cerca de la verdad para mí, pero el escape que necesitaba ser hecho usando una barra invertida antes de la barra inclinada en la máquina Windows Vista Business que estaba necesitando esto para:

RM=cmd \/C del 
0

Otra solución es crear un archivo que contiene del.bat:

@echo off 
del %* 

entonces el makefile puede contener simplemente

clean: 
    del *.o 

esto limpia el archivo MAKE, pero puede desordenar el directorio de construcción ligeramente.

1

Dado que los sistemas basados ​​en DOS tienen dos comandos diferentes para la eliminación de archivos y directorios, me parece que tiene dos diferentes define funciona mejor:

ifeq ($(OS),Windows_NT) 
    RM = cmd //C del //Q //F 
    RRM = cmd //C rmdir //Q //S 
else 
    RM = rm -f 
    RRM = rm -f -r 
endif 

clean: 
    $(RM) $(TARGET).elf $(TARGET).map 
    $(RRM) $(BUILD_DIR) 
0

pasó a mí también. En la parte superior de su archivo MAKE añadir:

SHELL=cmd 

Puesto que usted está compilando en Windows, seleccione 'cmd' como el shell por defecto. Este es importante porque GNU make buscará en la ruta un linux/unix como shell y si encuentra uno lo usará en su lugar. Este es el caso cuando cygwin está instalado. El efecto secundario de este comportamiento es que comandos como 'del' y 'echo' no se encuentran. Si le decimos a GNU make que use 'cmd' como su caparazón, entonces 'del' y tal estará disponible.

Cuestiones relacionadas