“make -j $ TOTAL_PROCESSORS”是什么意思?
假如我有两个核心处理器,它将执行“make -j2”。它到底是做什么的?
我在下面添加一个小例子
为了编译我的工具链,脚本文件使用 -
pushd toolchaindir
export TARGET=powerpc-linux-gnu
export LINUX_ARCH=powerpc
TOTAL_PROCESSORS=$(grep processor /proc/cpuinfo | wc -l)
make -j$TOTAL_PROCESSORS
if [ "$?" = "0" ]; then
echo "built toolchain successfully"
else
echo "failed during build"
exit 1
fi
popd
exit 0
它如何构建工具链?
答案 0 :(得分:3)
make -j2
告诉make它可以一次运行两个shell命令。 Make确定它是否可以从makefile执行此操作,因此最好正确编写makefile文件!
考虑这个noddy makefile:
1.o: 1.c
gcc -c 1.c -o 1.o
2.o: 2.c
gcc -c 2.c -o 2.o
prog: 1.o 2.o
gcc 1.o 2.o -o prog
如果你说make -j2 prog
,那么请巧妙地决定1.o
的制作完全独立于2.o
。因此,它可以同时运行两个编译 而不会出错。它确实如此。在最终链接步骤中将两个目标文件合并到prog
之前,等待两个完成这些编译。
非常聪明,只要你的makefile正确(如果它们不能在-jn
下工作那么它们就是糟糕的坏事!)。
答案 1 :(得分:1)
总之:是
它授权make
并行启动$TOTAL_PROCESSORS
个编辑。
答案 2 :(得分:0)
它扩展了环境变量TOTAL_PROCESSORS,可能是一个表示你拥有多少CPU /核心的数字,然后用这么多并行作业运行make。
您需要查看将TOTAL_PROCESSORS设置为值的内容。
答案 3 :(得分:0)
它会读取你的shell变量$ TOTAL_PROCESSORS并运行那么多作业。我猜这个变量设置为你机器上的处理器或核心数。你可以在shell中回显它的值,只是为了确定。