c++ - 如何连接必须同时运行且独立运行的两个文件夹/项目的生成文件
问题描述
我有以下问题:我有一个文件夹,假设 /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。
我该如何解决?甚至有可能吗?
解决方案
除了包含您的库 Makefile 之外lib/mylib/Makefile
,您还可以通过运行来使用递归 MAKE
$(MAKE) -C ../../lib/mylib/Makefile
从你的主模块的 Makefile modules/mymodule/Makefile
。
您可以对目标使用类似的解决方案clean
或distclean
您可以使用这样的虚假目标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/mylib
and modules/mymodule
。
另请参阅https://www.gnu.org/software/make/manual/make.html#Recursion
有些人认为递归 make 是有害的,但这取决于你如何使用它。
推荐阅读
- c++ - 如何显式调用指定的重载函数?
- asp.net-mvc - 保持浏览器连接活跃
- angular - 为什么这个 PrimeNG 下拉菜单没有使用相关的表单控件值初始化?
- python - 尝试通过 localhost 连接到烧瓶时出错
- pyinstaller - Pyinstaller - 获取 exe 文件的名称
- android - 如何在一个片段中收集数据并将其显示在 android studio 的另一个片段中,我正在使用共享首选项来执行此操作
- go - VSCode 出于某种原因在调试控制台中运行
- java - 如何在使用另一个活动滑动屏幕的活动中使用 onBackPressed?
- sql-server - 如何在 SQL Server 中以正确格式将字符串作为 DateTime 插入
- raspberry-pi - 重新加载 .asoundrc 文件而不重新启动