有没有办法测试在编译具有多个作业的项目时出现的缺失依赖项(-jN where N > 1)?
我经常遇到包,主要是开源包,只要我使用 -j1 或 -jN,构建过程就可以正常工作,其中 N 是相对较低的值,例如 4 或 8,但如果我使用更高的值,例如 48,则有点不常见,由于缺少依赖项而开始失败。
我尝试为自己构建一个 bash 脚本,该脚本将在给定目标的情况下找出所有依赖项,并尝试使用 -j1 显式构建每个依赖项,以验证没有一个依赖项本身缺少依赖项。它似乎适用于小型/中型软件包,但在更重要的软件包上失败,例如 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