0

我正在尝试编写一个非递归的 make 构建系统。
我试图完成的是每个makefile都将定义自己的变量,并且“感觉”他是系统中唯一的一个。
例如:
项目布局:
-Makefile
-src1
----Makefile
----example1.c
-src2
----Makfile
----example2.c

主 Makefile 如下所示:
include src1/Makefile
include src2/Makefile
all: $(TARGETS)

每个 src1/src2 makefile 看起来像这样:
SRC:=...
OBJ:=...
TARGETS+=bin1 #in src2 its bin2
bin1: $(OBJ)
----gcc ....
$(OBJ_DIR)/ %.o : $(SRC_DIR)/%.c
----gcc ....

但是这种设计模式不起作用,因为目标中配方的评估被推迟了。
这意味着 src1 中的所有同名变量都获得了 src2 变量的值(最后一个赋值)。我试图用 $(eval include ...) 替换包含但没有运气。
请注意,所有的变量赋值都是用 :=
完成的,有没有办法让每个 makefile 都可以定义他想要的,或者每个变量应该是唯一的?

谢谢,塔尔

4

1 回答 1

0

很难做到这一点。当我在一两个地方完成此操作时,我从每个目录中的 make 片段开始,这些片段可以包含在主 make 文件中,最后使用脚本方法扫描 make 片段并生成其他内容。我在那里也有一个 VPATH。

在“递归使认为有害”的论文中有一个如何实现这一点的例子,这可能会有所帮助。

于 2013-09-03T13:22:24.400 回答