0

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

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

并通过makesrcdir 中启动所有内容。

Makefile在源代码中:

EXE=exe1 exe2
LIB=mylib

all: $(LIB) $(EXE)

.PHONY: $(LIB) $(EXE)

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

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

例如,Makefile对于exe1是:

...
all: exe1 copy

exe1: exe1.o
    $(CC) $(CFLAGS) $(OBJ) $(LDFLAGS) -o $@

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
...

我的问题是,如果我更改mylibdir 中的文件,则库会正确重建,但exe1显然没有......有没有办法让makeexe1目标依赖于在先前调用中指定的目标(mylib),make而无需指定依赖于mylib' s 文件在exe1 Makefile?

谢谢你们。

4

1 回答 1

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并且src/exe1/exe1当你运行 Make in 时src。(如果你运行 Make in它将不起作用src/exe1/。)

于 2012-08-29T03:46:56.103 回答