Primeiro, você precisa citar os cifrões que devem ser interpretados pelo shell. Como é, $x e $(dirname $x) e $(basename $x) são analisados por make. Você também está perdendo um ponto-e-vírgula no final do corpo do loop while. Verifique a saída de execução make, você deve ver o shell reclamando sobre isso.
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
cat $$x | /opt/exp/bin/python2.7 process_results.py > $(W)/$(OVE)/$$(dirname $$x)_$$(basename $$x).xml; \
done
Outro provável problema é que $(dirname $x) já contém a parte $(W)/$(OVE) . Por exemplo, se $(W) for foo e $(OVE) for bar e $x for subdir/subsubdir/wibble.xml , você acabará tentando gravar arquivos como foo/bar/foo/bar/subdir/subsubdir_wibble.xml.xml , enquanto provavelmente você vai querer escrever foo/bar/foo/bar/subdir/subsubdir_wibble.xml.xml . Também é estranho que você esteja transformando um arquivo .xml em um arquivo .xml.xml . Se você quisesse remover a extensão .xml original, precisará escrever basename $$x .xml , mas é inútil remover a extensão apenas para adicioná-la novamente. Então você provavelmente quis escrever:
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
/opt/exp/bin/python2.7 process_results.py <$$x >$$(dirname $$x)_$$(basename $$x); \
done
Um outro problema é que, se qualquer uma das execuções de process_results.py falhar, o make continuará sendo executado e ainda relatará uma compilação bem-sucedida. Diga ao shell para parar se ocorrer um erro:
set -e; \
find $(W)/$(OVE) -name "*.xml" -print | \
while read x ; do \
/opt/exp/bin/python2.7 process_results.py <$$x >$$(dirname $$x)_$$(basename $$x); \
done