6

複数のジョブ (-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
4

1 に答える 1