Hi. I have a question about $? behavior. The manual says:
$? The names of all the prerequisites that are newer than the target, with spaces between them. It does not explicitly explain about non-existing prerequisites, but Paul explained the change in GNU Make 3.81 as follows: http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html So, non-existing prerequisites are included in $? and I agree this is the right thing to do. However, I noticed the behavior is changed when prerequisites are marked as .SECONDARY. [Test Code 1] ------------------>8--------------- foo: bar FORCE @echo newer prerequisites are: $? bar: .PHONY: FORCE ------------------>8--------------- Result: $ touch foo; make newer prerequisites are: bar FORCE Good. $? correctly contains 'bar' and 'FORCE'. This is what we expect because 'bar' and 'FORCE' do not exist. If you add .SECONDARY:, the behavior is different. [Test Code 2] ------------------>8--------------- foo: bar FORCE @echo newer prerequisites are: $? bar: .PHONY: FORCE .SECONDARY: ------------------>8--------------- Result: $ touch foo; make newer prerequisites are: Oh. $? does not include 'bar' and 'FORCE' any more despite they do not exist. Why is $? affected by the .SECONDARY special target? Is this intentional? -- Best Regards Masahiro Yamada _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make