Este es el comando makepp_speedup que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
makepp_speedup - Cómo hacer que makepp sea más rápido
DESCRIPCIÓN
¿Crees que makepp es lento? Se ha vuelto notablemente más rápido, pero concedido, todavía es
lento, especialmente si vienes de GNU make. Esto se debe a que comprueba concienzudamente todos
esas cosas en las que gmake te da dolor de cabeza, ignorando muchas dependencias (el "creo que
Necesito limpiar para deshacerme de un misterioso síndrome de error). Si sospecha que algún Perl
el código que agregó a sus archivos MAKE podría tener fallas, eche un vistazo a perl_performance.
Pero hay algunas cosas que puede hacer para aumentar la velocidad. Algunas de las cosas son
etiquetado como inseguro, en el sentido de que le está pidiendo a makepp que no verifique o haga ciertas cosas,
que crees que no son necesarios. Si estas cosas hubieran sido necesarias, la construcción puede
no ser correcto. Sin embargo, afortunadamente, este problema será temporal. Se corregirá
tan pronto como deje que makepp haga todas las comprobaciones.
Puede combinar varios de estos consejos para aumentar aún más la ganancia de tiempo.
Seguras Métodos
Usa maquillarse
La utilidad independiente makeppreplay, mppr repite cosas que makepp ya ha hecho,
sin gastos generales.
Usa a Más rápido Perl
Dentro de la versión 5.8, todos son aproximadamente iguales, solo 5.8.7 es un poco más rápido. Sintonizando tu
Perl también puede ayudar, como no compilarlo para 64 bits, que makepp no necesita. Para
ejemplo de compilación de ActiveState (http://www.activestate.com/activeperl>) de 5.8.7 para Linux
es más rápido que Perl 5.8.7 que viene con SuSE Linux 10.0.
Incluir as Pequeño as Posibles
Cada archivo adicional que incluya es doblemente penalizante. Por un lado, el compilador debe
buscar y en todos esos archivos. No notas esto mucho, porque es solo un
un poco más por llamada del compilador. Por otro lado, makepp también debe buscar, para encontrar
dependencias y averiguar si incurren en una reconstrucción. Entonces puede parecer que se estanca
mientras asimila muchas dependencias a la vez.
Una variante absolutamente mortal es el archivo de inclusión maestro del proyecto, que a su vez
incluye convenientemente todo lo que pueda necesitar. El resultado es que cualquier archivo de encabezado cambia
conduce a una construcción completa. Incluso sin un cambio, makepp debe pensar en todos esos encabezados
nuevamente, para cada fuente que compile. Solo un pequeño esfuerzo, ya que está almacenado en caché, pero
miles de archivos pueden hacer esto asombroso.
Puede resultar engorroso averiguar el conjunto mínimo de inclusiones y limpiar las que no
necesita más tiempo, pero realmente vale la pena. Si alguien conoce una herramienta que pueda identificar qué
los archivos se incluyen innecesariamente, ¡me encantaría mencionarlo aquí!
CONSTRUIR as Pequeño as You ¿ Necesita ayuda
Si tiene un objetivo predeterminado que hace varios programas, makepp tendrá que verificar
todas sus dependencias, hasta el archivo de encabezado más pequeño. Pero tal vez quieras
pruebe su cambio con solo uno de esos programas.
Entonces llamarías a makepp con un objetivo explícito. Los menos módulos o encabezados todos esos
programas tienen en común, mayor es el beneficio de no permitir que makepp los revise todos.
Digamos que su Makeppfile de nivel superior tiene esta regla:
$ (falsos todos): proggie1 proggie2 $ (only_phony_targets * / ** / all)
Entonces llamarías a cosas como
$ makepp proggie2
$ makepp proggie1 dir / subdir / proggie27
Usa preferido makefile nombres
Makepp busca archivos MAKE (a menos que los especifique explícitamente en la línea de comando o con
"load-makefile") en el orden Archivo RootMakepp, RootMakeppfile.mk, Archivo Makepp y
Makeppfile.mk, seguido de los nombres clásicos de los archivos MAKE. (Los .mk las variantes son puramente
sistemas basados en sufijos.)
Entonces, si usa Archivo RootMakepp en la raíz de su árbol de construcción, y Archivo Makepp everywhere
de lo contrario, los archivos se encontrarán un poco más rápido. Makepp también tendrá un tamaño ligeramente más pequeño.
consumo de memoria (almacenar en caché el hecho de que los otros nombres no existen), lo que también significa
velocidad gracias a una menor gestión de la memoria.
Del mismo modo si tiene una declaración
incluir estándar
primero habrá un intento de encontrar estándar.makepp, así que también podrías usar eso
nombre.
¿Tienes as pocos reglas as ustedes necesite
Makepp realiza un seguimiento no solo de los archivos existentes, sino también de los que aprende a crear.
(Es por eso que ofrece comodines confiables como * .o.) El precio de este poder es mucho
administración. Entonces, si le dice cómo crear un .o de un .c, está bien, porque lo hará
sucederá para la mayoría, si no para todos, los candidatos.
Pero si le dice cómo vincular cualquier ejecutable sin sufijo de un nombre similar .o, esa es
caro, porque probablemente solo sucederá en una pequeña parte de ellos (aquellos que
contienen una función principal), pero la base se sentará para todos. Tienes que pesar el
comodidad de una regla de patrón de enlazador, frente a la eficacia de las reglas de enlazador individuales.
Si no usa ninguno de ellos, también debe desactivar las reglas integradas con:
makepp_no_incorporado = 1
Si los usa, pero, por las razones explicadas anteriormente, no las reglas integradas del enlazador,
deberías apagarlos con:
makepp_no_builtin_linker = 1
poner hacer pp extensiones into a módulo
Makepp ofrece posibilidades muy convenientes de ampliarse a través de Perl. Pero si tu
escribir algunas funciones, comandos o declaraciones en un archivo e incluirlo de docenas de
makefiles, obtendrá docenas de copias de todos ellos en la memoria. Y serán leídos
docenas de veces por el analizador makepp, que es un poco más lento que el de Perl.
En esta situación, es mejor poner sus propias funciones en un módulo.
Usa Repositorios y/o a CONSTRUIR cache
Si tiene varios desarrolladores trabajando en la misma máquina o si cambia de un lado a otro
entre conjuntos de opciones de compilación, esto es para ti. Los repositorios le permiten ofrecer una central
referencia donde solo necesita construir lo que es localmente diferente. Un caché de compilación simplemente
recopila todos los archivos producidos y los reutiliza según corresponda, con menos planificación necesaria.
La última página también describe las diferencias.
Usa Sandboxes
Si tu compilación es tan grande que makepp tiene dificultades para digerir toda la información
y si puede encontrar una manera de dividirlo en partes independientes más pequeñas, las cajas de arena
podría ofrecerle un mejor paralelismo que la opción "--jobs".
No log what ustedes do
La función de registro de Makepp es muy poderosa para rastrear errores en el sistema de compilación, o
para analizar sus dependencias. Siempre que no haga estas cosas, puede ahorrar bastante
bit de formateo y E / S con "--no-log --no-scan-log".
Casi Seguras Métodos
Get a Inicio
La opción "--loop" (o "--stop-before-building" o "--stop-after-loading" o "--stop")
permite que makepp comience a funcionar mientras aún estás editando. Se suspenderá repetidamente
sí mismo cuando llega al punto de analizar las dependencias. Tu decides cuando estas listo
para dejarlo seguir. En nuestro gran proyecto, esto ahorra medio minuto, y eso es solo cuando
tener una CPU para nosotros.
Este método tiene dos posibles inconvenientes:
· Makeppfiles se han leído cuando se detiene makepp. Si edita un Makeppfile o
algo a partir de lo cual tendría que ser reconstruido, después de iniciar makepp, esto irá
desapercibido hasta la próxima. Pero esto rara vez debería ser necesario, ya que makepp
reduce en gran medida la necesidad de cambios en Makeppfile.
· Si un objetivo depende de un comodín, y eso coincidiría más que cuando el Makeppfile
fue leído, makepp no lo notará:
proggie: * .o
$ (LD) $ (entradas) -o $ (salida)
Si agrega otro archivo fuente, o un archivo desde el cual makepp sabe cómo generar un
source, entonces "* .o" debe coincidir con el objeto que produce. Pero, si este archivo fue agregado
después de iniciar makepp, no lo hará, porque el comodín se expandió demasiado pronto.
En ambos casos, debe eliminar el makepp prearrancado e iniciarlo de nuevo.
De Gulliver Travels
La opción "--gullible" le dice a makepp que crea que una regla cambia lo que dice que lo hará,
ni menos ni más. No realizar estas comprobaciones puede ahorrar un pequeño porcentaje de la CPU de makepp
tiempo. Y los ahorros de Disk I / O son especialmente bienvenidos en los sistemas de archivos de red. Si lo haces
compilaciones completas nocturnas en un directorio vacío con la opción "--repository", pero sin la
"--gullible", puede estar bastante seguro de que su conjunto de reglas es coherente. Luego esto
La opción no debería doler en su trabajo diurno.
Potencialmente Inseguro Métodos
Estos métodos no son seguros si le das a makepp las pistas incorrectas. Pero todo volverá a ser
bien, sin embargo, tan pronto como dejes que makepp haga todas las comprobaciones, sin pasar ninguna limitación
opciones. Por esta razón, sugiero usar estas sugerencias para obtener compilaciones intermedias rápidas,
y use la hora del almuerzo y las noches para dejar que makepp haga su trabajo a fondo.
CONSTRUIR as Pequeño as Necesidad
Este es el mismo consejo sobre el uso de objetivos explícitos que se analiza en "Construya tan poco como usted
Necesita "arriba. Pero se vuelve más peligroso, si lo hace porque está seguro de que su
el cambio no afectará a ninguno de los otros programas. Entonces no se construirán, incluso
aunque podría haber sido necesario.
Saber Dónde No a CONSTRUIR
La opción "--dont-build" es muy poderosa para acelerar mucho el maquillaje. Si conoces uno
o más directorios, que está seguro de que no se verán afectados por ningún cambio que haya realizado desde el
la última vez, puede emitir opciones "--dont-build" para ellos. Esto puede ahorrarle mucho a makepp
análisis de dependencia. Pero no creará nada en esos directorios, incluso si
debería tener.
Saber Dónde a CONSTRUIR
Es lo mismo que "Sepa dónde no construir", pero en lugar de una lista de exclusión,
proporcione una lista de inclusión. El truco es que una opción "--do-build", con una
"--dont-build = /" o en un directorio "RootMakeppfile (.mk)" sin un
La opción "--dont-build" en un directorio de nivel superior significa: no construir nada excepto lo que digo
usted a. Esto es lo que buscan los usuarios de marcas tradicionales cuando quieren construir
solo un directorio:
$ makepp --do-build = dir / subdir
o, si no tiene un "RootMakeppfile (.mk)":
$ makepp --dont-build = / --do-build = dir / subdir
La diferencia es que cualquier destino predeterminado en el Makeppfile de nivel superior, es decir, los comandos de enlace
también se ejecutan de esta manera. Si no quiere eso, debe dar un objetivo explícito,
que también se marca automáticamente para "--do-build":
$ makepp --do-build = dir1 / subdirectorio dir2 / proggie
Saber What a CONSTRUIR
Una variante extrema es pedirle a makepp que no construya nada más que lo que le digas. Esta
no es tan peligroso si cambiaste no incluir archivos, solo módulos, y sabes cuáles
programas en los que entran.
Supongamos que solo ha cambiado "src / a.cpp" y "src / b.cpp" y estos están vinculados directamente a
un programa. Dot es el directorio actual que incluye todos los subdirectorios.
$ makepp --dont-build =. src / ao src / bo proggie1
O de manera equivalente, porque una opción "--do-build", sin una opción "--dont-build" en un
El directorio de nivel superior implica "--dont-build" para la raíz del árbol de compilación:
$ makepp --do-build = src / ao src / bo proggie1
Puede hacer algo como lo siguiente en el archivo $ ENV de su Shell o .profile para guardar
escribiendo (los usuarios de csh reemplazan '=' con ''):
alias mppb = 'makepp --do-build'
alias mppsb = 'makepp --stop --do-build'
Entonces el último ejemplo se convierte en:
$ mppb src / ao src / bo proggie1
CONSTRUIR on a RAM disco
Las computadoras modernas, especialmente los servidores, suelen tener un tiempo medio alto entre fallas. Si
este es su caso, y tiene mucha RAM de sobra, puede ahorrar el tiempo que necesita
espere la E / S. Debe editar en un disco real o replicar sus ediciones allí rápidamente. Pero
los resultados de la compilación son reproducibles, por lo que pueden residir en la RAM. Si no quieres arriesgarte
reconstruyendo, siempre puede replicar en el disco después de cada compilación o por la noche. Usted no debe
Haga esto durante la compilación, ya que podría capturar archivos parcialmente escritos, como si el
la máquina se había estrellado.
Si tiene un sistema y / o unidad de almacenamiento con buen almacenamiento en caché y RAID, es posible que la ganancia no sea
tan grande.
Use makepp_speedup en línea usando los servicios de onworks.net