如何加快Ubuntu应用程序(make,cmake,gcc)的编译


Answers:


13

如果程序包支持,则可以使用该-j标志允许并行作业运行,例如:

make -j8

关于此标志的更多详细信息,请参见Stackoverflow问题。为什么使-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"
    

    现在configurecmake应用程序并使用以下命令进行构建:

    make -j$(distcc -j)
    

    请注意,如果您/usr/lib/distcc在PATH中输入了两次,它将失败。确保/usr/lib/distcc在您的服务器中仅设置一次PATH

有关更多详细信息,请参见distcc(1)distccd(1)的手册页。


天哪,J很好。我从15分钟缩短到不到1分钟。谢谢L.
Luis Alvarado 2012年

使用distcc可以获得更快的速度,PHP的编译在2分钟内完成,内核在3分钟内完成(三台i5机器)
Lekensteyn 2012年

我上班时会尝试使用distcc。昨天在问类似的问题。也许您可以在这里提供帮助:askubuntu.com/questions/106810/…–
Luis Alvarado

以root身份运行distccd似乎是一个坏计划。由于一些原因,我没有使用它,但是当我这样做时,由于没有这些机器的权限,我无法使用root。
2012年

@ams您无需以超级用户身份运行它。如果您以root用户身份运行它并想切换用户,请使用distccd --user nobody。否则,它将在执行它的用户下运行。
Lekensteyn'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.