如何依赖先前make调用的目标

时间:2012-08-28 09:21:43

标签: makefile gnu-make

我有一个lib(比如mylib)和两个可执行文件,其中一个(比如exe1)依赖于lib。在文件系统中我有:

src
   Makefile
   ...
   lib
     mylib
       Makefile
       ...
   exe1
     Makefile
     ...
   exe2
     Makefile
     ...

并在make dir中启动src所有内容都已建成。

src中的

Makefile

EXE=exe1 exe2
LIB=mylib

all: $(LIB) $(EXE)

.PHONY: $(LIB) $(EXE)

$(LIB):
    $(MAKE) -C lib/$@

$(EXE): $(LIB)
    $(MAKE) -C $@

,例如,Makefile的{​​{1}}是:

exe1

我的问题是,如果我更改了... all: exe1 copy exe1: exe1.o $(CC) $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@ %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ... 目录中的文件,则库已正确重建,但mylib肯定没有......有没有办法让exe1 make exe1 target取决于前一次make调用中指定的目标(mylib),而不指定mylib exe1Makefile个文件的依赖关系?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

@tripleee和@JackKelly(诅咒他的名字)是对的,这不是一个健康的makefile系统。

通过更改src/Makefile

,您可以获得所需的内容
EXE=exe1 exe2
LIB=lib/mylib/mylib

all: $(LIB) $(EXE)

.PHONY: $(EXE)

$(LIB):
    $(MAKE) -C lib/mylib

exe1: $(LIB)

$(EXE):
    $(MAKE) -C $@

并更改exe1/makefile,以便始终重建exe1

.PHONY: exe1

这仍有很多问题,但至少在lib/mylib/mylib中运行Make时会正确重建src/exe1/exe1src。 (如果你在src/exe1/中运行Make,会工作。)