2012-10-11 31 views
7

He siguiente makefile:Sólo primera orden del makefile se ejecuta

main.o: ServerSocket/main.cpp ../Shared/socket.h 
    g++ -c ServerSocket/main.cpp -lstdc++ 

DriveInfo.o: ServerSocket/DriveInfo.cpp ServerSocket/DriveInfo.h ServerSocket/Consts.h 
    g++ -c ServerSocket/DriveInfo.cpp -lstdc++ 

ProcessInfo.o: ServerSocket/ProcessInfo.cpp ServerSocket/ProcessInfo.h ServerSocket/Consts.h 
    g++ -c ServerSocket/ProcessInfo.cpp -lstdc++ 

thread_pool.o: ServerSocket/thread_pool.cpp ServerSocket/thread_pool.h 
DriveInfo.o ProcessInfo.o thread_pool.o 
server: main.o 
    g++ -o server main.o 
DriveInfo.o ProcessInfo.o thread_pool.o 

El problema es que sólo una orden de ese archivo se está ejecutando, por lo que si quiero ejecutar el siguiente < tengo que borrar o comentario comando previo ¿Qué pasa con este archivo MAKE?

+0

Dado que esta pregunta realmente no tiene nada que ver con C++, aparte del hecho de que los archivos en cuestión se compilan utilizando gcc, eliminé la etiqueta [C++]. –

Respuesta

17

Haga ejecutar por defecto la primera regla que le proporcione.

desea crear una regla que ejecutar todas las reglas que usted proporciona

all : main.o DriveInfo.o ProcessInfo.o thread_pool.o 

y colocarlo en el inicio de su Makefile o llamarlo con make all

+0

Gracias, eso funcionó :) –

4

Esto es por diseño. Se puede decir make que se enfoca en la construcción:

make main.o DriveInfo.o 

construirán estos dos objetivos. Alternativamente, si desea make por defecto para construir todos (o algunos) los objetivos, puede especificar una regla al comienzo del Makefile afirmando que:

all: main.o DriveInfo.o … 

Ahora, make all (o simplemente make) construirá todos los objetivos dependientes También es una buena práctica declarar all como phony target para indicar make que no corresponde a un archivo realmente existente. Haga esto poniendo .PHONY: all en el archivo Makefile.

Una observación final, el nombre all es arbitrario. Puede usar cualquier otro nombre aquí, pero all es convencional. La parte importante es que es la primera regla en su archivo Makefile si desea que sea la que se ejecuta cuando llama al make sin ningún objetivo explícito.

Cuestiones relacionadas