2011-03-24 13 views

Respuesta

5

Está haciendo a.txt por medio de una cadena de reglas implícitas (en este caso reglas implícitas que usted mismo definió). Por lo tanto, Make considera que foo.log es intermediate file y lo elimina cuando cumple su función. Puede anular este comportamiento declarando foo.log un objetivo secundario:

.SECONDARY: foo.log 
+1

.SECONDARIO:% .log # doesnt work, ¿qué debo hacer para que la regla sea general? –

+5

Si desea que todos los productos intermedios permanezcan, simplemente declare un objetivo de .SECONDARY: sin dependencias. Alternativamente, puedes usar el comodín con .PRECIOUS. es decir, .PRECIOUS:% .log – Sean

+1

@Sean: extraño que el comodín funcione con PRECIOUS, pero no con SECONDARY ... – Beta

22

Por defecto, GNU make elimina archivos intermedios. Como% .txt depende de% .log, make desea eliminar el archivo .log. Para evitar ese comportamiento, márcalos como preciosos con .PRECIOUS o .SECONDARY.

.PRECIOUS: foo.log 

Además, puede hacerlo de modo que no hay archivos intermedios son siempre eliminados mediante el uso de .SECONDARY sin dependencias.

.SECONDARY: 

Ver this sección del manual de fabricación GNU.

Cuestiones relacionadas