Makefiles, ¿cómo puedo usarlos?

^ Esta no es una pregunta duplicada ^

Actualizado :

Soy bastante nuevo en progtwigción y solo ahora me he topado con makefiles.

He descargado un montón de tutoriales y código fuente de una variedad de lugares en los últimos meses; hasta ahora solo he estado usando soluciones VS y las he estado evitando.

He visto varios métodos para usar Makefiles en google, pero todos difieren en complejidad …

No tengo ni idea sobre ellos ni cómo usarlos. Gracias.

Editar (reescrito):

Para resumir, debido a la obvia confusión, mis preguntas son (y siempre fueron):

1) Is there a good tutorial that comes recommended or is it easy to get started with Makefiles? 2) How do you launch and run an existing Makefile? And, 3) Do Makefiles hold any vital data about the program or could I just use the `.h` and `.cpp` files that come with them in a new solution built from scratch? 

    La cuestión de cuándo usar Makefile es una cuestión de opinión. Ciertamente puedes usar algún generador alternativo (como por ejemplo omake , pero hay muchos otros). Ciertamente, quiere algún sistema de construcción tan pronto como tenga más de una unidad de traducción en su software. Si usa make Makefile describe el proceso de comstackción detallando las dependencias. A menudo, la construcción de su progtwig se realiza simplemente a través del comando make simple.

    Algunas utilidades, por ejemplo, cmake , qmake , automake , etc … son generadores de Makefile . Generan un Makefile complejo que generalmente no usa todas las características de GNU make.

    Si decides usar make , te recomiendo usar GNU make (esta es también una opinión). En ese caso, lea atentamente su documentación , que me parece bastante legible y que contiene un buen tutorial. No olvides usar una versión reciente: la versión 4.0 de GNU make fue lanzada en octubre de 2013 y trae muchas nuevas e interesantes características (complementos, y lo más importante, extensibilidad a través de astucia ) que son interesantes para comstackciones complejas.

    Para depurar complejas Makefile -s, considere usar remake (notablemente como remake -x ).

    En la práctica, GNU make tiene muchas reglas incorporadas. Los obtienes con make -p ; entonces úsalos.

    También puede elegir codificar para la utilidad POSIX make (que es una especificación estándar, pero menos poderosa que la marca GNU , que se puede configurar para seguir la especificación POSIX).

    Cómo codificar un Makefile es una cuestión de gusto y complejidad del software. Si tiene 2 o 3 *.cc archivos con un solo encabezado común .h , no desea todos los trucos de fantasía (por ejemplo , dependencias automáticas , como lo proporcionan GCC y make ) que valen la pena usar en un software de muchos cientos de fonts archivos (y a veces se genera el código fuente de C ++, por lo que el sistema de comstackción debe saberlo).

    Aquí hay un pequeño archivo Makefile GNU para ayudarte:

     ## file Makefile CXX= g++ CXXSOURCES= main.cc other.cc CXXOBJECTS= $(patsubst %.cc, %.o, $(CXXSOURCES)) OPTIMFLAGS= -g -O PACKAGES= glib-2.0 PKGCONFIG= pkg-config CXXFLAGS= -std=c++11 -Wall $(OPTIMFLAGS) CPPFLAGS:= $(shell $(PKGCONFIG) --cflags $(PACKAGES)) LIBES:= $(shell $(PKGCONFIG) --libs $(PACKAGES)) -ldl .PHONY: all clean all: myprog myprog: $(CXXOBJECTS) $(LINK.cc) -rdynamic $^ $(LIBES) -o $@ $(CXXOBJECTS): yourheader.h clean: $(RM) *.o *.so *.orig *~ myprog core* *.hh.gch ## eof Makefile 

    No pretendo que sea un ejemplo perfecto (no lo es). Tenga cuidado, las tabulaciones son importantes para make y no puedo escribirlas arriba. Utilizará make all (o simplemente make ) para comstackr su progtwig, y make clean para eliminar archivos que no sean de origen.

    Por razones desconocidas, a veces se puede generar Makefile usando autotools o cmake . Para progtwigs simples, puede que no valga la pena el esfuerzo de aprender a usarlos.

    Hay algunos pocos casos en los que GNU make no vale la pena o no es apropiado: en MELT casi dejé de usarlo (al invocar un guión de shell generado automáticamente ) porque es un lenguaje bootstrapped donde un conjunto de archivos C ++ se genera a partir de un conjunto de archivos MELT, por lo que tiene una relación de dependencia casi circular múltiple o múltiple. Probablemente usar una extensión GUILE podría haber ayudado mucho. Pero tales situaciones de pesadilla son raras.

    PD: respondí como usuario de Linux; no sé qué aplica -o no- a Windows que nunca uso. Vea también estas sugerencias sobre progtwigción C o C ++ en Linux.

    PS2: la respuesta de Paul Evans es relevante: no escriba su propio Makefile , copie uno existente para satisfacer sus necesidades.

    El concepto fundamental para el éxito al comenzar a rodar su propio makefile no es ! Siempre tome un makefile simple, similar y funcional como plantilla y modifíquelo para su propia comstackción. Solo después de que esto funcione, puede buscar formas de mejorarlo, hacerlo más genérico, etc. a través de una lectura y un estudio diligentes. Entonces llegará un día en el futuro lejano, lejano en el que puedes escribir un makefile desde cero. Pero no te desanimes si ese día nunca llega.

    Si está pidiendo un buen tutorial, ¡creo que este es bueno! Puedes seguirlo totalmente. Aprendí el archivo make por él.