首页 > 解决方案 > 如何连接必须同时运行且独立运行的两个文件夹/项目的生成文件

问题描述

我有以下问题:我有一个文件夹,假设 /trunk/modules/mymodule 包含我必须使用构建系统构建的项目,并且我有 /trunk/libs/mylib 文件夹及其自己的 .cpp 和 .h 文件.

我的模块将需要使用我在 /libs/mylib 中构建的库,但该库也将被其他项目使用。所以我希望每当我构建我的项目时,我还要检查库是否已更新(并重建它是否有更改),但我希望库中的 makefile 能够独立运行,因此有人可以更新库或与另一个模块一起使用。

我有 2 个 Makefiles.in,我通过在第一个中调用 include ../../lib/mylib/Makefile 来连接它们,并在链接我的项目时使用 -L 相同路径 -lmylib,这也将是一个 .so 库。

我从逻辑上得到 warning: overriding recipe for target 'distclean'

warning: overriding recipe for target 'clean'

用于两个 makefile 中定义的 clean 和 make distclean。

我该如何解决?甚至有可能吗?

标签: c++makefile

解决方案


除了包含您的库 Makefile 之外lib/mylib/Makefile,您还可以通过运行来使用递归 MAKE

$(MAKE) -C ../../lib/mylib/Makefile

从你的主模块的 Makefile modules/mymodule/Makefile

您可以对目标使用类似的解决方案cleandistclean

您可以使用这样的虚假目标mylib

.PHONY: mylib all clean
LIBDIR=../../lib/mylib

all: mymodule

mymodule: mylib
        ...

mylib:
        $(MAKE) -C $(LIBDIR)

clean:
        $(MAKE) -C $(LIBDIR) $@
        ...

注意:如果您将此示例中的代码复制到 aMakefile中,请将缩进更改为使用制表符而不是空格。

Makefile您也可以考虑在trunk递归调用make中使用顶层lib/myliband modules/mymodule

另请参阅https://www.gnu.org/software/make/manual/make.html#Recursion

有些人认为递归 make 是有害的,但这取决于你如何使用它。


推荐阅读