You need a more elaborate construct to get the return value from make, if you want to execute it in a pipeline via /bin/sh. Try this (untested):
chop (my $status = `((make -f $params 2>&1 3>&-; echo \$? >&3 ) | tee
+-a build.log 1>&2 3>&- ) 3>&1`);
print "make exit status: $status\n";
update: added backslash to escape $?
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}