instalar - Solo se ejecuta el primer comando de makefile
makefile linux c (2)
Tengo siguiente archivo MAKE
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 solo se está ejecutando un comando de ese archivo, así que si quiero ejecutar el siguiente <Tengo que eliminar o comentar el comando anterior. ¿Qué pasa con este archivo MAKE?
Haga ejecutar por defecto la primera regla que le proporcione.
Desea crear una regla que ejecute todas las reglas que proporciona
all : main.o DriveInfo.o ProcessInfo.o thread_pool.o
y colóquelo al comienzo de su Makefile o llámelo con make all
Esto es por diseño. Puedes decir qué objetivos construir:
make main.o DriveInfo.o
construirá estos dos objetivos. De forma alternativa, si desea make
de forma predeterminada todos (o algunos) destinos, puede especificar una regla al comienzo del Makefile que indique que:
all: main.o DriveInfo.o …
Ahora, make all
(o simplemente make
) construirá todos los targets dependientes. También es una buena práctica declarar all
como un objetivo falso para decir que no corresponde a un archivo realmente existente. Haga esto poniendo .PHONY: all
en el Makefile.
Una observación final, el nombre es arbitrario. Puede usar cualquier otro nombre aquí, pero all
es convencional. La parte importante es que es la primera regla en tu Makefile si quieres que sea la que se ejecuta cuando llamas sin objetivos explícitos.