make -j $ TOTAL_PROCESSORS

时间:2011-03-09 18:47:31

标签: linux makefile

“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

它如何构建工具链?

4 个答案:

答案 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中回显它的值,只是为了确定。