SRCobtener todos los archivos fuente (los que terminan en .html) a través de Makefile's wildcard.
TAR sustituye cada archivo de origen enumerado SRCcon un destino que termina en .markdownlugar de .html.
.PHONY enumera objetivos no físicos que siempre están desactualizados y, por lo tanto, siempre se ejecutan; estos son a menudo ally clean.
El destinoall tiene como dependencia (archivos enumerados en el lado derecho de :) todos los *.markdownarchivos. Esto significa que todos estos objetivos se ejecutan.
%.markdown: %.html
pandoc -o $< $@
Este fragmento dice: cada destino que termina en .markdowndepende de un archivo con el mismo nombre, excepto que la dependencia termina en .html. El comodín% debe ser visto como un *shell. El %en el lado derecho, sin embargo, se compara con el partido en el lado izquierdo. Fuente .
Tenga en cuenta que la secuencia de espacios en blanco enfrente de pandoces a TAB, ya makeque define eso como un estándar.
Finalmente, el cleanobjetivo falso muestra cómo limpiar su sistema de los archivos que ha creado con este Makefile. En este caso, está eliminando todos los destinos (aquellos archivos que fueron nombrados *.markdown.
Una pregunta más por favor: ¿puede makefilecrear archivos desde cero o solo actualiza los archivos existentes? Porque cuando elimino los archivos generados, deja de funcionar. Pregunta tonta, lo sé, pero esto es Terranova para mí ^^ "
ahmed
1
¿quiere decir que si no hay archivos .markdown, se crearán? sí, debería hacerlo hasta donde yo sé
2014
1
Bien entonces. Voy a cavar un poco más. Gracias por sus respuestas, gracias a usted estoy en el camino correcto ahora
:)
1
Solo quería agradecerte por la gran respuesta. La forma en que ha explicado es muy fácil de entender, la razón detrás del comando no estaba funcionando y las instrucciones muy detalladas sobre cómo proceder. Gracias de nuevo.
No tienes objetivos definidos en tu Makefile. Se puede especificar el destino en la línea de comandos: make something.markdownutilizará la receta para crear something.markdowna partir something.html.
O puede agregar a su Makefile una regla que especifique objetivos predeterminados.
Entonces, el objetivo alltiene todos los archivos que desea crear como requisitos previos, por lo que cuando lo haga make all, creará todos los archivos enumerados.
pandoc
comando. Make es notablemente exigente con aquellos que son una pestaña y no espacios.Respuestas:
Problema:
Tu problema es que
make
no conoce tus objetivos.Puede ejecutar su Makefile anterior con,
make stackoverflow.markdown
por ejemplo, y funcionará.make
solo, sin embargo, fallará, ya que solo especificó cómo crear sus objetivos, pero no cuáles.Como señala Leiaz, la regla de patrón anterior se llama una regla implícita .
Makefile:
Explicación:
SRC
obtener todos los archivos fuente (los que terminan en.html
) a través de Makefile'swildcard
.TAR sustituye cada archivo de origen enumerado
SRC
con un destino que termina en.markdown
lugar de.html
..PHONY enumera objetivos no físicos que siempre están desactualizados y, por lo tanto, siempre se ejecutan; estos son a menudo
all
yclean
.El destino
all
tiene como dependencia (archivos enumerados en el lado derecho de:
) todos los*.markdown
archivos. Esto significa que todos estos objetivos se ejecutan.Este fragmento dice: cada destino que termina en
.markdown
depende de un archivo con el mismo nombre, excepto que la dependencia termina en.html
. El comodín%
debe ser visto como un*
shell. El%
en el lado derecho, sin embargo, se compara con el partido en el lado izquierdo. Fuente .Tenga en cuenta que la secuencia de espacios en blanco enfrente de
pandoc
es a TAB, yamake
que define eso como un estándar.Finalmente, el
clean
objetivo falso muestra cómo limpiar su sistema de los archivos que ha creado con este Makefile. En este caso, está eliminando todos los destinos (aquellos archivos que fueron nombrados*.markdown
.fuente
makefile
crear archivos desde cero o solo actualiza los archivos existentes? Porque cuando elimino los archivos generados, deja de funcionar. Pregunta tonta, lo sé, pero esto es Terranova para mí ^^ "Las reglas de patrón son reglas implícitas.
No tienes objetivos definidos en tu Makefile. Se puede especificar el destino en la línea de comandos:
make something.markdown
utilizará la receta para crearsomething.markdown
a partirsomething.html
.O puede agregar a su Makefile una regla que especifique objetivos predeterminados.
O con un comodín:
Cuando ejecuta solo
make
, el primer objetivo de la primera regla es el objetivo predeterminado . No necesita ser llamadoall
.Entonces, el objetivo
all
tiene todos los archivos que desea crear como requisitos previos, por lo que cuando lo hagamake all
, creará todos los archivos enumerados.fuente