使用makefile作为依赖项的Makefile目标

时间:2013-06-09 16:06:14

标签: makefile dependencies

我目前正在开发一个项目,我在父文件夹中有几个应用程序需要在子文件夹中包含的库更新时重建。父文件夹中的应用程序使用makefile构建,并且库在相应的文件夹中使用单独的makefile构建。这看起来像:

  • ParentDir
    • APP1
    • APP2
    • 生成文件
      • libdir1
        • 生成文件
      • libdir2
        • 生成文件

我正在为父目录中的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以“做某事”。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您应该为库创建一个虚拟依赖项,以便始终处理它们的Makefile。这是一个很好的例子和解释:http://owen.sj.ca.us/~rk/howto/slides/make/slides/makerecurs.html