Cómo depender de los objetivos de una invocación previa de make
Frecuentes
Visto 121 veces
0
Tengo una lib (digamos mylib
) y dos ejecutables y uno de estos (digamos exe1
) depende de lib. En el sistema de archivos tengo:
src
Makefile
...
lib
mylib
Makefile
...
exe1
Makefile
...
exe2
Makefile
...
y al lanzar make
in src
dir todo está construido.
Makefile
en origen:
EXE=exe1 exe2
LIB=mylib
all: $(LIB) $(EXE)
.PHONY: $(LIB) $(EXE)
$(LIB):
$(MAKE) -C lib/$@
$(EXE): $(LIB)
$(MAKE) -C $@
y, por ejemplo, Makefile
por exe1
es:
...
all: exe1 copy
exe1: exe1.o
$(CC) $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
...
Mi problema es que si cambio un archivo en mylib
dir la biblioteca está correctamente reconstruida pero exe1
obviamente no... hay alguna forma de saberlo make
que exe1
target depende de un objetivo (mylib) que se especifica en una invocación previa de make
sin especificar dependencias en mylib
archivos de en exe1
Makefile
?
Gracias a todos.
1 Respuestas
1
@tripleee y @JackKelly (maldito sea su nombre) tienen razón, este no es un sistema de archivos MAKE saludable.
Puedes obtener algo como lo que quieres cambiando src/Makefile
:
EXE=exe1 exe2
LIB=lib/mylib/mylib
all: $(LIB) $(EXE)
.PHONY: $(EXE)
$(LIB):
$(MAKE) -C lib/mylib
exe1: $(LIB)
$(EXE):
$(MAKE) -C $@
y cambiando exe1/makefile
para que así sea siempre reconstruir exe1
:
.PHONY: exe1
Esto todavía tiene muchos problemas, pero al menos se reconstruirá correctamente. lib/mylib/mylib
y src/exe1/exe1
cuando ejecutas Make in src
. (Va a no funciona si ejecuta Make in src/exe1/
.)
Respondido 29 ago 12, 04:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas makefile gnu-make or haz tu propia pregunta.
No creo que haya una manera sensata de hacer esto con Makefiles separados. Si tuviera un solo Makefile para todo su proyecto, esto debería ser simple. - tripleee
El comentario de ripleee probablemente no sea la respuesta que quieres escuchar, pero es verdad. Busque un documento llamado "Recursive Make Considered Harmful". Ambos normales
Makefile
s y automakeMakefile.am
ambos pueden expresar sistemas de compilación no recursivos. - Jack Kelly