$ cat Makefile
.ONESHELL:
SHELL = /usr/bin/perl
.SHELLFLAGS = -w -E 'use warnings FATAL => "all";' -E
all:
print 'it works'
$ make all
print 'it works'
Can't find string terminator "'" anywhere before EOF at -e line 1.
make: *** [Makefile:5: all] Error 255
$
Without .ONESHELL: the above
.SILENT: (without prerequisites) doesn't work as expected when
.SILENT: some_target (with prerequisites) is present:
$ cat Makefile
.SILENT:
.SILENT: target_a
target_a:
echo target_a_recipe
target_b:
echo target_b_recipe
$ make target_b
On Tue, 2022-01-11 at 10:57 +, Edward Welbourne wrote:
> Indeed. The compiler is allowed to place a string literal in read-
> only memory, where modifying it (even if you do "put it back the way
> it was" later) is an access violation. Passing such a const char *
> to your function would
On Sat, 08 Jan 2022 17:29:33 -0500 Paul Smith wrote:
>>> It turns out to be innocuous because none of the callers care that
>>> the value of the input string is modified if we return a different
>>> string, but it's still wrong and should be fixed.
Indeed. The compiler is allowed to place a