我有一个包含源代码的应用程序目录,在同一个目录中还有另一个包含库的目录。我想使用递归来编译它。这是示例:
我制作了一个虚构的目录树:
> mkdir lib
> touch lib/src1.c
> touch lib/src2.c
然后在主目录中,我用代码创建了一个 main.c
int main(){return 0;}
和一个makefile
all: test
main.o: lib/libsomelib.a
lib/libsomelib.a: lib
lib:
make --directory=$@
.PHONY: lib
test: main.o
cc -L./lib -lsomelib main.o -o $@
在lib中我创建了一个makefile:
all: libsomelib.a
.PHONY: all
libsomelib.a: src1.o src2.o
ar rcs $@ $^
从父目录运行 make 具有预期的效果。
现在,如果我删除说 lib/src1.o:
rm lib/src1.o
并再次运行 make,makefile 将递归地运行到 lib 中,但由于在重建库之前检查了库的依赖关系,因此不会更新主应用程序。
我需要重新运行 make 来编译可执行文件。
我该如何解决?
先感谢您。