Як прискорити компіляцію програм Ubuntu (make, cmake, gcc)


11

Я складаю тут деякі програми і в мене є 4 ядра. Чи є спосіб сказати make, cmakeчи gccскомпілювати з використанням всіх ядер або що - то , які впливають?

Відповіді:


13

Якщо пакет підтримує його, ви можете використовувати -jпрапор, щоб дозволити виконання паралельних завдань, наприклад:

make -j8

Більш детальну інформацію про цей прапор можна знайти у питанні Stackoverflow. Чому make -j працює краще, коли він передається числом, більшим за кількість наявних ядер? .

Розподілена компіляція

Якщо у вас є кілька машин, дайте distcc ходити. На задіяних машинах sudo apt-get install distcc. Якщо припустити, що ваша машина побудови 192.168.1.1:

  • на допоміжних машинах запустіть:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • На машині збирання перед запуском configureабо cmakeпотрібно вказати хости, які ви хочете використовувати для процесу збирання. За бажанням вкажіть кількість одночасних завдань після косої риски (за замовчуванням до 4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    Зробіть компілятор використовувати distcc:

    export PATH="/usr/lib/distcc:$PATH"
    

    Тепер configureабо cmakeдодаток і створити за допомогою:

    make -j$(distcc -j)
    

    Зауважте, що якщо ви /usr/lib/distccдвічі помістили свій PATH, він вийде з ладу. Не забудьте встановити /usr/lib/distccлише один раз у своєму PATH.

Детальніше дивіться на сторінках керівництва для distcc (1) та distccd (1) .


OMG, що J - це добре. Я пішов від 15 хвилин до менше 1. дякую Л.
Луїс Альварадо

Це може стати швидшим за допомогою distcc, компіляція PHP була зроблена за 2 хвилини, ядро ​​було зроблено за 3 хвилини (три машини i5)
Lekensteyn

Спробую з distcc, коли я прийду на роботу. Запитували подібне запитання щодо цього вчора. Можливо, ви можете допомогти з цим тут: askubuntu.com/questions/106810/…
Луїс Альварадо

Запуск distccd як root здається поганим планом. Я не використовував його з кількох причин, але коли я це зробив, я не міг використовувати root, оскільки не мав дозволу на цих машинах.
Ams

@ams Вам не потрібно запускати його як root. Якщо ви запускаєте його як root і хочете переключити користувачів, використовуйте distccd --user nobody. В іншому випадку він працює під користувачем, який його виконав.
Лекенштейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.