[ACCEPTED]-Shell status codes in make-makefile
I think you're looking for the $?
shell variable, which 11 gives the exit code of the previous command. For 10 example:
$ diff foo.txt foo.txt
$ echo $?
0
To use this in your makefile, you 9 would have to escape the $
, as in $$?
:
all:
diff foo.txt foo.txt ; if [ $$? -eq 0 ] ; then echo "no differences" ; fi
Do note 8 that each command in your rule body in make 7 is run in a separate subshell. For example, the 6 following will not work:
all:
diff foo.txt foo.txt
if [ $$? -eq 0 ] ; then echo "no differences" ; fi
Because the diff
and 5 the if
commands are executed in different 4 shell processes. If you want to use the 3 output status from the command, you must 2 do so in the context of the same shell, as 1 in my previous example.
Use '$$?' instead of '$$!' (thanks to 4th 1 answer of Exit Shell Script Based on Process Exit Code)
Don't forget that each of your commands 8 is being run in separate subshells.
That's 7 why you quite often see something like:
my_target:
do something \
do something else \
do last thing.
And 6 when debugging, don't forget the every helpful 5 -n option which will print the commands 4 but not execute them and the -p option which 3 will show you the complete make environment 2 including where the various bits and pieces 1 have been set.
HTH
cheers,
If you are passing the result code to an 1 if
, you could simply do:
all:
if diff foo.txt foo.txt ; then echo "no differences" ; fi
The bash variable is $?
, but why do you want 1 to print out the status code anyway?
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.