2010-01-13 16 views
115

mayoría de las aplicaciones de Linux son recopilados con:¿Cómo sabe la aplicación "hacer" el objetivo predeterminado para construir si no se especifica ningún objetivo?

make 
make install clean 

Como lo entendía, hacen que lleva los nombres de tipos de generación como argumentos. Entonces, install es un destino que copia algunos archivos y luego clean es un destino que elimina los archivos temporales.

¿Pero qué objetivo se construirá make si no se especifican los argumentos (por ejemplo, primer comando en mi ejemplo)?

Respuesta

154

De forma predeterminada, comienza procesando el primer objetivo que no comienza con un '.' aka the default goal; para hacer eso, puede que tenga que procesar otros objetivos, específicamente, de los que depende el primer objetivo. El GNU make manual cubre todo esto, y es una lectura sorprendentemente fácil e informativa.

+0

No es el objetivo de "todos" como estados respuesta anterior? :( – grigoryvp

+3

No, no es el objetivo 'todo'. –

+33

Llamar al primer objetivo 'todo' es solo una convención. – Tobu

27

GNU Make también le permite especificar el objetivo de creación predeterminado utilizando una variable especial llamada .DEFAULT_GOAL. Incluso puede deshacer esta variable en el medio del archivo MAKE, haciendo que el próximo objetivo en el archivo se convierta en el objetivo predeterminado.

Cosas realmente interesantes pero esotéricas. Pero estoy de acuerdo con Anon: el manual de gnu make es bastante legible. Podrías pensar que no necesitas saber la mayoría de las cosas que contiene, pero una vez que veas uno muy completo, realmente apreciarás algunas cosas realmente fantásticas que puedes hacer con ellas: manipulación de cadenas, funciones de archivos/directorios, etc.

Ref: The Gnu Make manual - Special Variables

88

para salvar a otros de unos segundos, y para salvarlos de tener que leer el manual, aquí está la respuesta corta. Agregue esto a la parte superior de su archivo de make:

.DEFAULT_GOAL := mytarget 

MyTarget será ahora el objetivo que se ejecuta si "hacer" se ejecuta y no se especifica ningún objetivo.

Si tiene una versión anterior de make (< = 3.80), esto no funcionará. Si este es el caso, entonces usted puede hacer lo menciona anon, sólo tiene que añadir esto a la parte superior de su archivo de make:

.PHONY: default 
default: mytarget ; 

Referencias: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html

+0

¿Qué hace eso? – nathanengineer

+0

@nathan Hace que mytarget sea el objetivo predeterminado si alguien ejecuta "make" sin ningún parámetro. – Samuel

+1

Tenga en cuenta que .DEFAULT_GOAL no parece ser compatible con GNU make v3.80, y también asumiría versiones anteriores (v3.81 sí lo admite). Si está ejecutando una versión anterior de make, deberá asegurarse de que su destino predeterminado sea el primer objetivo o el más alto en su archivo make. – Samuel

Cuestiones relacionadas