我有一个lib(比如mylib
)和两个可执行文件,其中一个(比如exe1
)依赖于lib。在文件系统中我有:
src
Makefile
...
lib
mylib
Makefile
...
exe1
Makefile
...
exe2
Makefile
...
并在make
dir中启动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
exe1
中Makefile
个文件的依赖关系?
谢谢大家。
答案 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/exe1
和src
。 (如果你在src/exe1/
中运行Make,不会工作。)