以Makefile作为依赖项的Makefile目标

以Makefile作为依赖项的Makefile目标,makefile,dependencies,Makefile,Dependencies,我目前正在从事一个项目,在父文件夹中有几个应用程序,每当更新子文件夹中包含的库时,都需要重建这些应用程序。父文件夹中的应用程序是使用makefile构建的,库是使用各自文件夹中的单独makefile构建的。这看起来像: 父目录 附件1 附件2 生成文件 libdir1 生成文件 libdir2 生成文件 我目前正在为父目录中的makefile执行类似的操作 all : app1 app2 libs = libdir1/lib1.a libdir2/lib2.a .PHONY

我目前正在从事一个项目,在父文件夹中有几个应用程序,每当更新子文件夹中包含的库时,都需要重建这些应用程序。父文件夹中的应用程序是使用makefile构建的,库是使用各自文件夹中的单独makefile构建的。这看起来像:

  • 父目录
    • 附件1
    • 附件2
    • 生成文件
      • 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之一被更新。我知道目前发生这种情况的原因是我的LIB被声明为虚假的(因此它们总是重建),但这是我能够找出真正调用子makefiles的唯一方法

因此,我希望每个应用程序只在libdir的makefile中的任何一个实际执行某些操作时进行构建,并在构建应用程序之前调用每个libdir的makefile以“执行某些操作”


提前感谢您的帮助。

您应该为库创建一个虚拟依赖项,以便始终处理它们的生成文件。下面是一个很好的示例和说明:

对于大型makefile构建项目来说是一个很好的参考。多谢。当我有足够的代表时,我会回来投票支持你的答案;)或阅读“递归制造被认为有害”,并考虑使用更好的风格建议。