3

我目前正在开发一个项目,我在父文件夹中有几个应用程序,只要更新子文件夹中包含的库,就需要重新构建这些应用程序。父文件夹中的应用程序是使用 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 之一被更新。我知道目前发生这种情况的原因是我将我的库声明为 PHONY(所以他们总是重建),但这是我能弄清楚实际调用子 makefile 的唯一方法。

因此,我想要的是每个应用程序仅在任何一个 libdirs makefile 实际执行某些操作时才构建,并在构建应用程序之前调用每个 libdir 的 makefile 将“执行某些操作”。

提前感谢您的帮助。

4

1 回答 1

1

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

于 2013-06-09T16:20:12.927 回答