Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

makefile unexpectedly removes target

Tags:

A minimal example:

%.txt: foo.log     # pass  %.log:     # pass 

Run:

$ make a.txt --dry-run # pass # pass rm foo.log 

Why is the last action rm foo.log? How can I get rid of it?

like image 676
Łukasz Lew Avatar asked Mar 24 '11 23:03

Łukasz Lew


1 Answers

By default, GNU make removes intermediate files. Since %.txt depends on %.log, make wants to remove the .log file. To prevent that behavior you mark them as precious with .PRECIOUS or .SECONDARY.

.PRECIOUS: foo.log 

Also, you can make it so that no intermediate files are ever removed by using .SECONDARY with no dependencies.

.SECONDARY: 

See this section of the GNU make manual.

like image 115
Sean Avatar answered Oct 04 '22 14:10

Sean