Tengo una pila de software que crea algunos archivos intermedios como parte del proceso de compilación. Se produce un problema y se rompe la construcción. Quiero echar un vistazo a esos archivos generados intermedios. Para mi sorpresa, esos archivos se están eliminando como parte del proceso de compilación.Cómo deshacer la eliminación de archivos intermedios
Removing intermediate files...
rm fact_test_without_proxies.c fact_test_main.c fact_test_without_proxies.o
Revisé los Makefiles No veo ninguna regla explícita que los elimine. ¿Puede haber reglas implícitas para eliminar archivos intermedios? En caso afirmativo, ¿cómo puedo desactivar esas reglas implícitas?
Veo la impresión Removing intermediate files...
solo si make se ejecuta con la opción --debug
.
[email protected]:~/coding/factorial/ut$ make --debug
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
Reading makefiles...
Updating goal targets....
File `check' does not exist.
File `test_dept_run' does not exist.
File `fact_test' does not exist.
File `fact_using_proxies.o' does not exist.
File `fact_test_without_proxies' does not exist.
File `fact_test_without_proxies.o' does not exist.
File `fact_test_without_proxies.c' does not exist.
File `fact_test_main.c' does not exist.
Must remake target `fact_test_main.c'.
nm -p fact_test.o | build_main_from_symbols >fact_test_main.c
Successfully remade target file `fact_test_main.c'.
Must remake target `fact_test_without_proxies.c'.
cp fact_test_main.c fact_test_without_proxies.c
Successfully remade target file `fact_test_without_proxies.c'.
Must remake target `fact_test_without_proxies.o'.
gcc -I../src -c -o fact_test_without_proxies.o fact_test_without_proxies.c
Successfully remade target file `fact_test_without_proxies.o'.
Must remake target `fact_test_without_proxies'.
gcc fact_test_without_proxies.o fact.o fact_test.o -o fact_test_without_proxies
fact.o: In function `unknown':
fact.c:(.text+0x67): undefined reference to `do_update'
collect2: ld returned 1 exit status
make: *** [fact_test_without_proxies] Error 1
Removing intermediate files...
rm fact_test_without_proxies.c fact_test_main.c fact_test_without_proxies.o
Gracias, esto de hecho ayudó :) – Kamath
No solo eso, usando .PRECIOUS significa que estos archivos no se eliminarán aunque Make se complete con éxito (es decir, no se elimine ni se elimine). "Además, si el objetivo es un archivo intermedio, no se eliminará después de que ya no se necesite, como se hace normalmente. [...] En este último aspecto, se superpone con el objetivo especial .SECONDARIO". - https://www.gnu.org/software/make/manual/make.html – PonyEars
+1: a diferencia de '.SECONDARY', esto es POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ make.html –