我目前正在开发一个项目,我在父文件夹中有几个应用程序需要在子文件夹中包含的库更新时重建。父文件夹中的应用程序使用makefile构建,并且库在相应的文件夹中使用单独的makefile构建。这看起来像:
我正在为父目录中的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被更新。我知道目前发生这种情况的原因是我将我的libs声明为PHONY(所以他们总是重建),但这是我能想出实际调用子makefile的唯一方法。
所以,我想要的是每个应用程序仅在libdirs makefile中的任何一个实际执行某些操作时构建,并且在构建应用程序之前调用每个libdir的makefile以“做某事”。
提前感谢您的帮助。
答案 0 :(得分:1)
您应该为库创建一个虚拟依赖项,以便始终处理它们的Makefile。这是一个很好的例子和解释:http://owen.sj.ca.us/~rk/howto/slides/make/slides/makerecurs.html