我目前正在开发一个项目,我在父文件夹中有几个应用程序,只要更新子文件夹中包含的库,就需要重新构建这些应用程序。父文件夹中的应用程序是使用 makefile 构建的,而库是使用相应文件夹中的单独 makefile 构建的。这看起来像:
- 父目录
- 应用程序1
- 应用程序2
- 生成文件
- libdir1
- 生成文件
- libdir2
- 生成文件
- libdir1
我目前正在为父目录中的 makefile 做类似的事情
all : app1 app2
libs = libdir1/lib1.a libdir2/lib2.a
.PHONY : $(libs)
$(all) : $(libs)
#do stuff to make the apps
libdir1/lib1.a :
$(MAKE) -c libdir1
libdir2/lib2.a :
$(MAKE) -c libdir2
我的问题是,我不希望父目录的 makefile 中的应用程序重建,除非它“依赖”的 makefile 之一被更新。我知道目前发生这种情况的原因是我将我的库声明为 PHONY(所以他们总是重建),但这是我能弄清楚实际调用子 makefile 的唯一方法。
因此,我想要的是每个应用程序仅在任何一个 libdirs makefile 实际执行某些操作时才构建,并在构建应用程序之前调用每个 libdir 的 makefile 将“执行某些操作”。
提前感谢您的帮助。