ビルドプロセスの一部として中間ファイルを作成するソフトウェアスタックがあります。問題が発生し、ビルドが中断します。私はそれらの中間生成ファイルを見たいと思います。驚いたことに、これらのファイルはビルドプロセスの一部として削除されています。中間ファイルの削除を取り消す方法
Removing intermediate files...
rm fact_test_without_proxies.c fact_test_main.c fact_test_without_proxies.o
私はMakefilesを通過しましたが、削除する明示的なルールはありません。中間ファイルを削除するための暗黙のルールがありますか?はいの場合、どうすれば暗黙のルールを無効にできますか?
Removing intermediate files...
は、--debug
オプションでmakeを実行した場合のみ表示されます。
[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
これは本当に助けてくれてありがとう:) – Kamath
それだけでなく、.PRECIOUSこれらのファイルは、Makeが正常に完了しても削除されないことを意味します(つまり、killまたは中断されません)。 "また、ターゲットが中間ファイルである場合、通常行われているように、もはや必要なくなった後は削除されません。[...]この後者の点では、.SECONDARY特殊ターゲットと重複します。 - https://www.gnu.org/software/make/manual/make.html – PonyEars
+1: '.SECONDARY'と違って、これはPOSIXです:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ make.html –