【发布时间】:2020-06-09 12:04:05
【问题描述】:
我有这个 makefile 代码:
$(DIRS):
@echo " MKDIR build/tmp/base/socket/$@"
$(Q)mkdir -p $@/
%.a.s:
@echo " CC build/tmp/base/socket/$@"
$(Q)$(CC) $(CFLAGS_A) -S $< -o $@
%.so.s:
@echo " CC build/tmp/base/socket/$@"
$(Q)$(CC) $(CFLAGS_SO) -S $< -o $@
%.o: %.s
@echo " AS build/tmp/base/socket/$@"
$(Q)$(AS) $< -o $@
tcp/client.a.s: $(TCP_CLIENT_SRC) $(TCP_CLIENT_INC)
tcp/client.so.s: $(TCP_CLIENT_SRC) $(TCP_CLIENT_INC)
tcp/server.a.s: $(TCP_SERVER_SRC) $(TCP_SERVER_INC)
tcp/server.so.s: $(TCP_SERVER_SRC) $(TCP_SERVER_INC)
我想在名称中以tcp/ 开头的所有目标的先决条件中添加一个| tcp,但我希望能够在一行中完成。我不想手动将它附加到需要它的每一行。
我想添加这条新规则:
tcp/%.s: | tcp
但它什么也没做。
我还想到了更通用的,这样会更好,但结果相同:
%.s: | $(@D)
我应该怎么写?
一种解决方法是每次都调用 mkdir(将其包含在 %.a.s 和 %.so.s 规则中),但这会增加对 mkdir 的不必要调用,不是吗?
【问题讨论】:
标签: makefile wildcard gnu-make