带替换的 Makefile 模式不捕获非本地源

问题描述 投票:0回答:0

我有一个项目,它在本地子目录中有源代码,在 SDK 中也有源代码,它们位于不同的位置。

所有目标文件都需要在项目的构建目录树中构建,SDK 的源代码需要放在

$(OUTPUT_DIR)/sdk
。我需要一种通用的方法来处理 GNU-Make 的所有来源。

我有这个功能来匹配源路径到对象路径:

source_to_object_path = $(OUTPUT_DIR)/$(subst $(SDK_PATH),sdk,$1)

所以这成功匹配,例如,本地

app.c
$(OUTPUT_DIR)/app.o
,以及
$(SDK_PATH)/timer/timer.c
$(OUTPUT_DIR)/sdk/timer/timer.o

但我正在努力编写一种模式,将所有 .c 源捕获到 .o 目标。

或者这个(1):

$(call source_to_object_path,%).o : %.c

或这个(2):

$(call source_to_object_path,$(<D))%.o: %.c

只抓取本地源,SDK 中的源是“Nothing to done”。即使

source_to_object_path
应用于 SDK 中的源提供了正确的对象路径,并且正确构建了对象列表。所有源路径也在 VPATH 中。

因此,我需要另一种模式 (3) 用于成功运行的 SDK 中的源代码:

$(call source_to_object_path,$(SDK_PATH))/%.o: $(SDK_PATH)/%.c

为什么没有指定

SDK_PATH
的模式对这些不起作用?
source_to_object_path
不应该关心这个吗,怎么可能在这里使用一种模式而不是两种模式?

makefile gnu-make
© www.soinside.com 2019 - 2024. All rights reserved.