【发布时间】:2013-09-06 02:06:09
【问题描述】:
我正在尝试编写一个非递归的 make 构建系统。
我试图完成的是每个makefile都将定义自己的变量,并且“感觉”就像他是系统中唯一的一个。
例如:
项目布局:
-Makefile
-src1
----Makefile
----example1.c
-src2
----Makfile
----example2.c
主 Makefile 如下所示:
包括 src1/Makefile
包含 src2/Makefile
全部:$(TARGETS)
每个 src1/src2 生成文件如下所示:
SRC:=...
OBJ:=...
TARGETS+=bin1 #in src2 它的 bin2
bin1: $(OBJ)
----gcc ....
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
----gcc ....
但是这种设计模式不起作用,因为目标中配方的评估被推迟了。
这意味着 src1 中所有同名的变量都获得了 src2 变量的值(最后一个赋值)。我试图用 $(eval include ...) 替换包含但没有运气。
请注意,所有变量分配都是通过 :=
完成的
有没有办法让每个 makefile 都可以定义他想要的或者每个变量都应该是唯一的?
谢谢, 总
【问题讨论】:
-
目标文件应该放在哪里?我的意思是,有
obj1/吗?或者src1/obj/?还是只是'obj/'? -
想一想,可执行文件应该放在哪里?如果您在
src1中运行 Make,它应该构建src1/bin1。但是如果你在主目录中运行Make,它应该构建bin1和bin2,还是src1/bin1和src2/bin2?
标签: makefile