如何连接两个文件夹/项目的生成文件,这两个文件夹/项目必须一起运行且独立运行
How to connect makefiles for two folders/projects that must be run both together and independent
我有以下问题: 我有一个文件夹,比如说/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'
对于两个生成文件中定义的 Clean 和 make distclean。
我该如何解决这个问题?甚至可能吗?
而不是包含你的库 Makefilelib/mylib/Makefile
你可以通过运行来使用递归 MAKE
$(MAKE) -C ../../lib/mylib/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) $@
...
注意:如果将此示例中的代码复制到Makefile
,请将缩进更改为使用制表符而不是空格。
您还可以考虑在trunk
中使用以递归方式调用make
的顶级Makefile
lib/mylib
和modules/mymodule
。
另请参阅 https://www.gnu.org/software/make/manual/make.html#Recursion
有些人认为递归是有害的,但这取决于你如何使用它。
非递归方式: 如果您控制所有生成文件并且可以完全重写它们,那么我建议您查看 https://github.com/cppfw/prorab
它允许为邻居项目提供独立的生成文件,并且还允许将一个生成文件包含在另一个生成文件中并添加编译依赖项。 请参阅 github 存储库中的 WIKI。
基本上,您将可执行文件的依赖项添加到某些libmylib.so
,并且还包括构建该库的makefile。
- 两个文件使用彼此的功能-如何解决
- 结构包含在两个头文件中,这两个文件我都不拥有
- Levenshtein 两个文件的距离花费了太多时间
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 包括两个文件 C++ 之间的冲突
- 如何检测两个文件条目是否引用与Qt相同的物理文件系统?
- 比较两个文件夹的关系
- 连接两个文件时如何避免冗余尾随换行符?
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 比较两个文件中的两个中间人的最佳方法.C++
- 同时逐行阅读两个文件
- 包含两个C++文件的制作文件:如何选择要编译的文件
- 在 c++ 中对两个文件使用标头
- 同时阅读两个文件
- 如何连接两个文件夹/项目的生成文件,这两个文件夹/项目必须一起运行且独立运行
- 从其他两个文件中创建一个分类整数的文件
- C 程序处理两个文件,而不是一个文件
- 知道分割故障在哪里比较两个文件
- 如何从文件中的类调用,以使用着色器显示在另一个包含gl代码的文件中(其中两个文件都在jni文件夹中)
- C++自定义读取函数为文件夹中的前两个文件返回错误的值