複数のジョブ (-jN where N > 1) を含むプロジェクトをコンパイルするときに表示される不足している依存関係をテストする方法はありますか?
ほとんどがオープン ソースのパッケージで、-j1 または -jN (N は 4 や 8 などの比較的低い値) を使用している限りビルド プロセスが正常に機能しますが、48 などのより高い値を使用すると、少し珍しいパッケージに遭遇することがよくあります。 、依存関係がないために失敗し始めます。
私は、ターゲットを指定してすべての依存関係を把握し、-j1 を使用してそれらの依存関係のそれぞれを明示的に構築して、依存関係が欠落していないことを検証する bash スクリプトを自分で構築しようとしました。小規模/中規模のパッケージで動作するように見えますが、たとえば uClibc のような重要なパッケージでは失敗します。
コードを読むことで私が何を意味するかをよりよく理解する人もいるかもしれないので、ここで私のスクリプトを共有しています。また、より堅牢なソリューションが存在し、共有できることを願っています.
#!/bin/bash
TARGETS=$*
echo "TARGETS=$TARGETS"
for target in $TARGETS
do
MAKE="make"
RULE=`make -j1 -n -p | grep "^$target:"`
if [ -z "$RULE" ]; then
continue
fi
NEWTARGETS=${RULE#* }
if [ -z "$NEWTARGETS" ]; then
continue
fi
if [ "${NEWTARGETS}" = "${RULE}" ]; then
# leaf target, we do not want to test.
continue
fi
echo "RULE=$RULE"
# echo "NEWTARGETS=$NEWTARGETS"
$0 $NEWTARGETS
if [ $? -ne 0 ]; then
exit 1
fi
echo "Testing target $target"
make clean && make -j1 $target
if [ $? -ne 0 ]; then
echo "Make parallel will fail with target $target"
exit 1
fi
done