Este es el comando makepp 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 - Reemplazo compatible pero mejorado para make
SINOPSIS
hacer pp [-e] [-C dir ] [-f makefile] [-F makefile_o_dir ]
[-j n] [-k] [-m Método ] [--noremake-makefiles]
[--nowarn] [-q] [-R dir] [--traditional-recursive-make]
[-v] [--versión] [ VAR = valor ...] [ dirigidos ...]
mpp [-opciones] [ VAR = valor ...] [ dirigidos ...]
DESCRIPCIÓN
Makepp, un programa de compilación que tiene una serie de características que permiten compilaciones confiables y
archivos de compilación más simples, es un reemplazo directo para GNU make. Es compatible con casi todos los
sintaxis que GNU make admite, y se puede usar con archivos MAKE producidos por utilidades como
como automake. Se llama makepp (o hacer ++) porque fue diseñado con un soporte especial
para C ++, que desde entonces se ha extendido a otros lenguajes como Swig o SQL incorporado. También
su relación con “piensen de nuevo sobre los incrementos de precio” es análogo a la relación de C ++ con C: es casi el 100%
compatible con versiones anteriores, pero agrega una serie de características nuevas y formas mucho mejores de escribir
hacer archivos
Makepp pasa un extenso conjunto de pruebas y se utiliza en varios proyectos importantes. Si usted tiene
cualquier problema con la última versión de CVS, grita, e intentaremos solucionarlo rápidamente. Makepp
se ejecuta con cualquier versión de Perl desde la 5.8.
Las siguientes páginas del manual contienen más información sobre cómo utilizar makepp:
Tutorial
Cómo escribir un archivo MAKE. Esto está destinado principalmente a alguien con poca o ninguna
experiencia en el uso de cualquier implementación de make.
Tutorial de compilación
Qué hacen los comandos de compilación de Unix.
Notas de lanzamiento
Qué cambió con cada lanzamiento.
Incompatibilidades
¿Qué funciona de manera diferente entre GNU make y makepp.
Acelerar
Varios consejos para hacer que makepp sea mucho más rápido.
Rendimiento de Perl
Varios consejos para hacer la programación en Perl (dentro de sus archivos MAKE y en otros lugares) van
más rápido.
Libro de cocina
Respuestas rápidas a "¿Cómo ...?" o "¿Cuál es la mejor manera de ...?"
Preguntas frecuentes Respuestas rápidas a las preguntas con las que se ha encontrado la gente.
Construir algoritmo
En qué se diferencia fundamentalmente el algoritmo de compilación de makepp del de make tradicional.
Crear caché
Un caché de compilación es un directorio que almacena los resultados de compilaciones anteriores en caso de que sean
necesario de nuevo en el mismo directorio, o en una compilación separada en un directorio diferente.
Construir métodos de verificación
Cómo makepp decide cuándo construir.
Comandos integrados
Comandos potentes y eficientes disponibles en cualquier lugar donde se encuentre makepp 2.0 o posterior.
Reglas integradas
Para programas muy simples, ¡es posible que no necesite un archivo MAKE en absoluto! Estos son los incorporados
reglas que makepp conoce.
Compatibilidad
Dónde y con qué versión de Perl makepp funciona.
Extensión
Cómo puede agregar funciones a makepp escribiendo su propio código Perl.
Funciones
Funciones para manipulación de texto y varios otros propósitos.
Repositorios
Los repositorios son una técnica que simplifica tanto las compilaciones de variantes como el mantenimiento de una
conjunto de fuentes.
Reglas
Especificar reglas para construir archivos.
Sandboxes
Usando sandboxes para particionar la construcción.
Escaneado
Cómo makepp busca dependencias como archivos de inclusión.
Signatures
Cómo decide makepp cuándo han cambiado los archivos.
Declaraciones
Directivas adicionales para controlar makepp.
Variables
Usar variables para simplificar reglas.
hacer pp, mpp
Sintaxis de la línea de comandos de la utilidad principal.
makeppclean, mppc
Un script de limpieza independiente eficiente para eliminar archivos generados por makepp.
hacer un gráfico, mpg
Una utilidad independiente para analizar gráficamente las dependencias y las razones de una
reconstruir.
makeppinfo, mppi
Una utilidad independiente para volcar de forma legible la información de compilación que makepp recuerda sobre cada
.
makepplog, mppl
Una utilidad independiente para analizar las dependencias y los motivos de una reconstrucción.
makeppreplay, mppr
Una utilidad independiente para repetir cosas que ha hecho makepp, pero mucho más rápido.
Home
Todas las palabras clave, funciones y operadores de makepp.
Caracteristicas
Escaneo automático de archivos incluidos
Makepp escanea automáticamente los archivos incluidos. Esto evita la necesidad de herramientas como
makedepend. El escáner de Makepp funciona incluso si los archivos incluidos aún no existen, pero
tiene que ser construido. (Esto es cierto sin importar de qué parte de la ruta de inclusión provengan,
a diferencia de los programas que dependen de la opción "-MM -MG" de gcc.) Makepp tiene un sistema flexible
para hacer esto, que se basa en escanear el comando de compilación; puedes adaptarlo para
otros lenguajes o construir comandos escribiendo una subrutina Perl.
Mejor sistema para compilaciones jerárquicas
Makepp tiene un mejor sistema para manejar compilaciones que involucran múltiples directorios y
múltiples archivos MAKE. La técnica tradicional es hacer que se invoque a sí mismo.
recursivamente en cada directorio. Dependiendo de lo complicadas que sean las interdependencias
son, a veces se necesitan varios pases recursivos. Esto hace que los archivos MAKE sean muy
complicado si garantizan una correcta construcción. El verdadero problema es que a menos que
las dependencias son triviales (por ejemplo, solo un archivo de biblioteca), es casi imposible
expresar con precisión las dependencias de los objetivos en un archivo MAKE en términos de objetivos de
el otro archivo MAKE. Unix make no es lo suficientemente inteligente como para darse cuenta de que un objetivo en uno
makefile depende de un archivo que es un destino en un archivo MAKE de nivel inferior; no puede tomar
compilar comandos desde el archivo MAKE de nivel inferior mientras intenta compilar el objetivo en
el archivo MAKE de nivel superior. Entonces, la solución habitual es construir todo lo que se pueda
construido con los archivos MAKE de nivel inferior, con la esperanza de que sea adecuado para construir todo
que es necesario para el archivo MAKE de nivel superior.
Makepp carga todos los archivos MAKE necesarios a la vez, por lo que no tiene problemas para manejar
situaciones en las que un archivo de un archivo MAKE depende de un archivo producido por un
makefile. Makepp cd's automáticamente al directorio que contiene el archivo MAKE antes
ejecutar un comando desde un archivo MAKE, por lo que cada archivo MAKE se puede escribir de forma independiente
sin conocimiento del directorio de compilación de nivel superior. Pero si el acceso a la raíz de tu
el árbol de compilación es importante (por ejemplo, porque ahí es donde reside su directorio de inclusión),
puede nombrar el archivo MAKE en ese directorio especialmente. Entonces makepp te da el camino
a ese directorio en una variable.
Makepp también puede averiguar dónde están todos los archivos MAKE de todo el proyecto sin
dicho, si cada archivo MAKE está en el mismo directorio que los archivos que se supone que debe
Produce. Esto también puede simplificar mucho los archivos MAKE.
Para obtener más detalles sobre la creación con varios directorios, consulte "Sugerencias para varios
directorios "en makepp_cookbook.
Comodines confiables
Los Makefiles pueden usar comodines de manera confiable, porque los comodines coinciden con los archivos que
existe, or archivos que aún no existen pero que makepp sabe cómo construir. Así que incluso para un
programa con docenas de módulos, todo su archivo MAKE podría simplemente leer algo como
modo:
CXX = g ++
CXXBANDERAS = -g
% .o:% .c
$ (CXX) $ (CXXFLAGS) -c $ (entrada) -o $ (salida)
mi_programa: * .o
$ (CXX) $ (entradas) -o $ (salida)
y esto funcionará incluso si todavía no se ha creado ninguno de los archivos ".o".
Compilaciones confiables: recuerda el comando de compilación
Makepp realiza un seguimiento de los comandos de compilación, de modo que si cambian las opciones de compilación, los archivos
se reconstruyen automáticamente. Esto es importante para garantizar construcciones correctas. (Esta idea
fue tomado de la utilidad "contras" de Bob Sidebothem, que se describió en el Perl
Journal en 1998 y está disponible en CPAN.)
Para ilustrar por qué esto es importante, considere la siguiente definición de estructura:
clase ABC {
int x;
#ifndef ESPECIAL_OPCIÓN
int y;
#terminara si
intz;
};
Ahora suponga que decide activar la opción "SPECIAL_OPTION" agregando
"-DSPECIAL_OPTION" a la línea de comando. Se necesita una recopilación de todo, pero
una marca Unix tradicional no detectará esto y solo recompilará los archivos fuente
que realmente han cambiado. Como resultado, algunos de sus módulos se compilarán con
-DSPECIAL_OPTION, y otros no lo harán. Después de una sesión de depuración muy frustrante,
Descubrirá que todo lo que hay que hacer es reconstruir todo. Entonces, lo harás
curse make y, con suerte, cambiar a una implementación mejorada, como makepp. A
al menos, eso es lo que hice.
Como otro ejemplo, suponga que está trabajando en un proyecto que está bastante bien
depurado, por lo que normalmente se compila con "-O2". Ahora te encuentras con un error que necesitas
para mirar en el depurador. El código compilado con optimización es difícil de examinar
en el depurador, por lo que desea volver a compilar su código para poder verlo. Si
su archivo MAKE está configurado para almacenar las opciones del compilador en las variables habituales, puede
solo haz esto:
makepp CFLAGS = -g CXXFLAGS = -g
y makepp sabrá que la línea de comando ha cambiado para todos los módulos. Entonces cuando
has encontrado tu error, solo escribe
hacer pp
y se volverá a compilar con optimización. No es necesario que escriba "limpiar" cuando
cambia las opciones de construcción.
Algunos archivos MAKE (por ejemplo, los del kernel de Linux) hacen todo lo posible para forzar
recompilación cuando cambia el comando de compilación. Con makepp, se cuida
automáticamente, no tiene que hacer nada.
Construcciones confiables: coincidencia exacta de la firma
De forma predeterminada, makepp no se limita a garantizar que todos los objetivos sean más nuevos que todos
dependencias; si reemplaza una dependencia con un archivo anterior, makepp sabe que tiene
para reconstruir el destino, simplemente porque el archivo de entrada ha cambiado. Este es otro
característica importante para garantizar construcciones correctas que se tomó de la utilidad "contras".
Cálculos de firmas inteligentes
Algunas modificaciones a los archivos de origen no requieren realmente una reconstrucción. Por ejemplo, si
simplemente cambia una línea de comentario, o si reintroduce algún código, no hay ningún
razón para forzar una compilación. Para la compilación C / C ++, makepp determina si un
el archivo necesita recompilarse calculando una suma de comprobación criptográfica del contenido del archivo,
ignorando los comentarios y los espacios en blanco, en lugar de mirar la hora del archivo.
Esto es particularmente útil si tiene archivos de inclusión generados por archivos que
cambian y, sin embargo, los archivos de inclusión generados rara vez cambian. Suponga que usted
tiene una gramática yacc complicada en su programa, con una regla de compilación como esta:
y.tab.c y.tab.h: analizador.y
yacc -d analizador.y
Normalmente, cada vez que realiza un pequeño cambio en "parser.y", cada archivo que
depende de "y.tab.h" debe reconstruirse ya que la hora del archivo de "y.tab.h" ha cambiado.
Sin embargo, la mayoría de los cambios en "parser.y" en realidad no cambiarán el contenido de "y.tab.h"
(excepto posiblemente un comentario), por lo que toda esa recopilación es innecesaria.
Repositorios
Makepp puede incorporar automáticamente archivos de un árbol de directorios diferente (el
"repositorio") en el árbol de compilación actual según sea necesario. (Esta idea también fue tomada de
el programa "contras"). Esto tiene varios usos interesantes:
Compilaciones variantes
Suponga que ha estado compilando su programa con optimización y depuración
apagado. Ahora aparece un error y tienes que volver a compilar todo con la depuración.
activado. Sin embargo, una vez que encuentre el error, desactivará la depuración y
la optimización de nuevo, y con la mayoría de los programas make tendría que volver a compilar todos
las fuentes nuevamente, incluso las que no cambiaron. El procedimiento se vería
Me gusta esto:
% makepp CFLAGS = -O2 # Compila todo.
# Ups, error descubierto aquí
% makepp CFLAGS = -g # Recompila todo de nuevo.
gdb mi_programa
# ... encuentra el error
% makepp CFLAGS = -O2 # Recompila todo por tercera vez.
Con makepp, puede simplemente cd a un directorio vacío y especificar su original
directorio como repositorio. Esto creará nuevos archivos de objeto en el vacío.
directorio, mientras deja intactos sus archivos de objeto antiguos. Ahora puedes encontrar el error
en el directorio compilado con debug, arréglelo en sus fuentes originales y luego vaya
de vuelta a su directorio original. Ahora solo los pocos archivos que ha cambiado en realidad
necesita ser recompilado.
Todo el procedimiento se vería así:
% makepp CFLAGS = -O2 # Compila todo.
# Ups, error descubierto aquí
% mkdir depurando
% de depuración de cd
% makepp -R .. CFLAGS = -g # Compilar con depuración habilitada, pero
# poner objetos en el subdirectorio de depuración.
% gdb mi_programa
# ... encuentra el error
% cd .. # Volver al directorio original.
% makepp CFLAGS = -O2 # Recompila solo esos archivos
# que cambiaste.
Esto puede suponer un enorme ahorro de tiempo si hay muchos módulos.
Equipo de desarrollo con fuentes comunes
Suponga que tiene un equipo de desarrolladores trabajando en un conjunto estándar de fuentes. Cada
El desarrollador está realizando cambios independientes, pero no necesita tener una copia del
árbol de origen completo. Usando los repositorios de makepp, puede hacer que cada desarrollador tenga
copias solo de los archivos que ha cambiado. Makepp automáticamente y
crear temporalmente enlaces simbólicos para los otros archivos que no se han modificado
a los archivos correspondientes en el repositorio. Incluso puede hacer esto para el objeto.
archivos que existen en el repositorio y no necesitan ser recompilados en el
directorio individual del desarrollador.
Garantizar reglas correctas
Si sus reglas hacen algo que no le dijo a makepp, el repositorio
El mecanismo no sabrá buscar esas cosas. Entonces, algo que se construye normalmente
pero falla de un repositorio que le dice que corrija sus reglas.
Inferencia automática de archivos ".o" necesarios
Makepp a menudo puede inferir exactamente qué objetos son realmente necesarios sin ser
dicho explícitamente. Si utiliza esta función, si uno de sus archivos de origen incluye
"xx.h", y hay un archivo llamado "xx.o" que makepp sabe cómo hacer, luego makepp
agrega "xx.o" a la línea de comando del enlace. Ahora no uso bibliotecas no compartidas en muchos
lugares donde solía hacerlo, porque makepp puede seleccionar automáticamente los módulos que necesito.
Manejo correcto de alias para directorios
Makepp no se confundirá con enlaces suaves a un directorio o por diferentes parientes
nombres de archivo que hacen referencia al mismo archivo. Se reconocen todas las rutas de directorio a un archivo,
de alta calidad que incluyen foo, ./foo, ../src/foo, / auto_mnt / somedisk / bob / src / foo y
/ users / bob / src / foo.
Nombres de archivo con caracteres especiales
Makepp puede admitir nombres de archivo con dos puntos o espacios u otros caracteres especiales que
causar problemas para la marca tradicional. Simplemente rodee el nombre del archivo con comillas. (Ver
"Caracteres especiales" en makepp_rules para obtener más detalles).
Funciones extensibles de sustitución textual
Makepp puede usar subrutinas de Perl arbitrarias para la sustitución textual en el archivo Make.
Si conoce Perl, no está limitado en absoluto por el conjunto de funciones integradas de makepp
funciones de manipulación textual.
También puede simplemente escribir código Perl en su archivo MAKE. Puedes manipular Make
variables con todo el poder de todo el lenguaje Perl. Consulte makepp_variables para
Detalles.
Registro de decisiones de construcción
De forma predeterminada, makepp hace que un archivo de registro sea visible con makepplog, mppl que contiene un
descripción de cada archivo que intentó construir, qué regla se usó para construirlo, qué
dependía de y (si el archivo se reconstruyó) por qué. Esto puede resultar muy útil para
depurar un archivo MAKE: si se pregunta por qué makepp decidió reconstruir un archivo, o por qué
no fue así, puede buscar en el archivo de registro donde se explican las decisiones.
Soporte mejorado para compilaciones paralelas
Makepp admite compilaciones paralelas, pero (a diferencia de otras implementaciones de make)
no mezclará la salida de procesos separados que se ejecutan simultáneamente.
Sinónimos de variables crípticas
Makepp admite sinónimos más fáciles de recordar para las variables make crípticas $ @, $ ^ y
$ <. Consulte makepp_variables para obtener más detalles.
Use makepp en línea usando los servicios de onworks.net