make -j $ TOTAL_PROCESSORS - PullRequest
       0

make -j $ TOTAL_PROCESSORS

1 голос
/ 09 марта 2011

что означает "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 ]

3 голосов
/ 09 марта 2011

make -j2 говорит make, что он может запускать две команды оболочки одновременно.Make определяет, может ли он делать это из вашего make-файла, так что вам лучше написать свои make-файлы правильно!

Рассмотрите этот несносный make-файл:

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.Таким образом, он может запустить два компилятора одновременно без ошибок.Так оно и есть.Make ждет, пока оба этих компиляций завершатся, прежде чем объединить оба объектных файла в prog на последнем шаге ссылки.

Невероятно умно, если вы правильно делаете свои make-файлы (если они нене работают под -jn тогда они плохо плохо плохо!).

1 голос
/ 09 марта 2011

Одним словом: да

Он разрешает make запускать $TOTAL_PROCESSORS параллельные компиляции.

0 голосов
/ 09 марта 2011

Он читает любую переменную оболочки $ TOTAL_PROCESSORS и запускает столько заданий.Я предполагаю, что эта переменная соответствует числу процессоров или ядер на вашей машине.Вы можете повторить его значение в оболочке, просто чтобы быть уверенным.

0 голосов
/ 09 марта 2011

Она расширяет переменную среды TOTAL_PROCESSORS, предположительно до числа, которое указывает, сколько у вас процессоров / ядер, а затем запускает make с таким количеством параллельных заданий.

Вам нужно посмотреть, что устанавливает значение TOTAL_PROCESSORS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...