【发布时间】:2021-12-03 08:58:43
【问题描述】:
#
# Sources are .c and .s files
#
# Append .o to both .c and .s:
PRJ_OBJ := $(addprefix $(BUILD_PATH)/,$(addsuffix .o, $(PRJ_SRC)))
# Create .c.d from .c.o and .s.d from s.o:
PRJ_DEP_TEMP := $(PRJ_OBJ:.c.o=.c.d)
PRJ_DEP += $(PRJ_DEP_TEMP:.s.o=.s.d)
如何在一行而不是两行中同时替换 .c.o=.c.d 和 .s.o=.s.d?
文档:GNU Make Substitution References.
【问题讨论】:
-
PRJ_DEP += $(PRJ_OBJ:%.o=%.d)也应该可以工作。%不区分文件名和扩展名。另请参阅gnu.org/software/make/manual/html_node/Substitution-Refs.html -
这两个建议都将替代 .c.o 和 .s.o 文件,这可能不是 OP 的意图。
-
PRJ_DEP = $(patsubst %.c.o,%.c.d,$(patsubst %.s.o,%.s.d,$(PRJ_OBJ)) -
@Danijel -- 您是否关心诸如
foo.o之类的文件(它与.c.o或.s.o模式不匹配?在这种情况下,您希望发生什么?那些文件?请注意,您当前的解决方案将在PRJ_DEP中包含foo.o