我们当前的主要Makefile 导入许多子制作。除了自动依赖之外,每种格式的一般格式如下所示:
OBJS += \
$(OBJS_DIR)/<filename>.o \
...
C_DEPS += \
$(OBJS_DIR)/<filename>.d \
$(OBJS_DIR)/%.o: $(MODULES_PATH)/%.c $(OBJS_DIR)/%.d
$(GCC) ...
OBJS和C_DEPS在主makefile中定义并在所有包含的makefile中累积。顺便说一句,我们在调用中使用-j来执行parralel。
我尝试的第一件事是更改每个makefile中每个条目列出两次的事实,一次在OBJS中,再一次在C_DEPS中。我想到的改变如下:
OBJ := \
$(OBJS_DIR)/<filename>.o \
...
OBJS += $(OBJ)
C_DEPS += $(OBJ:.o=.d)
一种局部变量,并使用它来添加为对象和依赖列表。但这不起作用,至少有两个问题:
我正在考虑将变量名称设置为动态,但这看起来也很丑陋,并且无法保证不会包含来自不同路径的两个具有相同名称的makefile。
有什么方法吗?
答案 0 :(得分:0)
感谢@Vroomfondel提供的观察结果可以得到简单的答案。 在包含调用之间保存varibale的内容实际上是通过连接到OBJS和C_DEPS执行的操作,问题是变量在读取时没有扩展,并且在完成控制之后它只保留了来自最后一个设置OBJ值的makefile。 事实证明它并不重要的是变量OBJ是什么,问题在于我将OBJS和C_DEPS都设置为递归扩展变量。一旦我将它们设置为简单扩展变量,问题就解决了,OBJ在阅读时被扩展到它们中。 那是来自
OBJS =
C_DEPS =
要
OBJS :=
C_DEPS :=