具有Makefile依赖项的Makefile目标

3
我目前正在一个项目中工作,该项目有几个应用程序在父文件夹中。只要子文件夹中包含的库得到更新,这些应用程序就需要重新构建。父文件夹中的应用程序使用Makefile进行构建,而库使用各自文件夹中的独立Makefile进行构建。其结构类似于:
  • 父文件夹
    • 应用程序1
    • 应用程序2
    • Makefile
      • 库文件夹1
        • Makefile
      • 库文件夹2
        • 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被更新。我知道目前发生这种情况的原因是我已经将我的库声明为PHONY(所以它们总是重新构建),但这是我能想出的唯一调用子makefiles的方法。
因此,我想要的是每个应用程序仅在任何libdirs makefile实际执行操作时才构建,并在构建应用程序之前调用每个libdir的makefile执行“操作”。
感谢您提前的帮助。
1个回答

1

非常适用于大型Makefile构建项目的参考资料。非常感谢。当我有足够的声望时,我会回来给你点赞的 ;) - MadDogMcNamara
或者阅读《递归式 Make 的危害》并考虑采用其中建议的更好的风格。 - dmckee --- ex-moderator kitten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接