2011-05-03 13 views
10
SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 


$(CC) $(SOURCES) -o $(TARGET) 

clean: 


rm -rf $(TARGET) 

Above es el Makefile de mi servidor web. Aunque archivo server.c está en el directorio esto da el error barbechoError de Makefile: Ninguna regla para hacer objetivo

make: *** No rule to make target `Server', needed by `all'. Stop. 

¿Cuál es el error que he cometido y la forma de resolverlo.

+1

¿Su makefile realmente se parecen a los anteriores? Si no, edita hasta que los dos coincidan. Si lo hace, lee la sintaxis del archivo MAKE. –

+0

ya este es mi archivo MAKE. Esto me da el error anterior. –

Respuesta

17

Creo que su makefile quedó ilegible en algún lugar entre la máquina y el puesto, pero hay una solución simple que creo que va a trabajar:

all: $(SOURCES) 

Eso será (probablemente) resolver el problema y hacer pasar el error lejos-- si eso es todo lo que quieres, entonces puedes dejar de leer. Pero todavía hay cosas mal con este makefile, por lo que podemos hacer algunas más mejoras.

En primer lugar, un pequeño ajuste para que coincida con lo que creo que el makefile realmente dice:

SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 
    $(CC) $(SOURCES) -o $(TARGET) 

clean: 
    rm -rf $(TARGET) 

Las tres primeras líneas y la regla clean están bien, vamos a ignorar esos. Ahora nos damos TARGET su propia regla y enderezar los requisitos previos:

all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $(SOURCES) -o $(TARGET) 

Ahora hacemos all PHONY (ya que en realidad no tiene un archivo llamado "todos"), e introducir variables automáticas para hacer la regla TARGET más robusto y menos redundante:

.PHONY: all 
all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $< -o [email protected] 

Hay más para saber si su base de código se vuelve más complicado, pero que va a hacer por ahora.

1

simplemente haga "make clean" para limpiar todos los enlaces, luego ejecute make nuevamente. Todo debería ser bueno.

0

Mi problema fue que tenía el nombre y el comando en la misma línea. Marca: seguro que estás usando pestañas y no espacios. (Sin doble sentido)

ANTES (Broken)

build: docker build... 

DESPUÉS

build: 
     docker build... 
Cuestiones relacionadas