Gibt es eine Möglichkeit, fehlende Abhängigkeiten zu testen, die beim Kompilieren eines Projekts mit mehreren Jobs (-jN, wobei N > 1) auftreten?
Ich stoße oft auf Pakete, meist Open Source, bei denen der Build-Prozess einwandfrei funktioniert, solange ich -j1 oder -jN, wobei N ein relativ kleiner Wert wie 4 oder 8 ist, verwende. Aber wenn ich höhere Werte wie 48 verwende, etwas ungewöhnlich, beginnt er aufgrund fehlender Abhängigkeiten zu scheitern.
Ich habe versucht, mir selbst ein Bash-Skript zu erstellen, das, ausgehend von einem Ziel, alle Abhängigkeiten ermittelt und versucht, jede dieser Abhängigkeiten explizit mit -j1 zu erstellen, um zu überprüfen, dass keine von ihnen in ihrem eigenen Recht fehlende Abhängigkeiten hat. Es scheint mit kleinen/ mittleren Paketen zu funktionieren, scheitert jedoch bei wichtigeren wie z. B. uClibc.
Ich teile mein Skript hier, da einige Personen möglicherweise durch das Lesen des Codes besser verstehen können, was ich meine. Ich hoffe auch, dass eine robuster Lösung existiert und zurückgeteilt werden kann.
#!/bin/bash
ZIELE=$*
echo "ZIELE=$ZIELE"
für ziel in $ZIELE
do
MAKE="make"
REGEL=`make -j1 -n -p | grep "^$ziel:"`
if [ -z "$REGEL" ]; then
fortsetzen
fi
NEUEZIELE=${REGEL#* }
if [ -z "$NEUEZIELE" ]; then
fortsetzen
fi
if [ "${NEUEZIELE}" = "${REGEL}" ]; then
# Blattziel, das wir nicht testen wollen.
fortsetzen
fi
echo "REGEL=$REGEL"
# echo "NEUEZIELE=$NEUEZIELE"
$0 $NEUEZIELE
if [ $? -ne 0 ]; then
exit 1
fi
echo "Teste Ziel $ziel"
make clean && make -j1 $ziel
if [ $? -ne 0 ]; then
echo "Make-Parallel wird mit Ziel $ziel scheitern"
exit 1
fi
done