Dig*_*uma 12 debugging foreach makefile eval
我正在尝试为大型项目调试makefile,我正在努力define TEMPLATE/ endef和foreach/ eval/ call构造.特别是我认为我很难弄清楚我需要引用哪些变量$以及需要引用哪些变量$$.
我认为如果我可以在变量扩展之前看到eval/ callexpansion 的实际结果,我会更容易调试.
举例来说,如果我们使用的例子EVAL文档为GNU的化妆,我们有以下的makefile片段:
PROGRAMS = server client
server_OBJS = server.o server_priv.o server_access.o
server_LIBS = priv protocol
client_OBJS = client.o client_api.o client_mem.o
client_LIBS = protocol
...
define PROGRAM_template =
$(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
ALL_OBJS += $$($(1)_OBJS)
endef
$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
Run Code Online (Sandbox Code Playgroud)
我认为foreach在变量扩展之前,这应该有效地扩展到以下内容:
server: $(server_OBJS) $(server_LIBS:%=-l%)
ALL_OBJS += $(server_OBJS)
client: $(client_OBJS) $(client_LIBS:%=-l%)
ALL_OBJS += $(client_OBJS)
Run Code Online (Sandbox Code Playgroud)
我手动想出了上面的扩展(更正欢迎),但我正在寻找一种通用的方法来展示这个扩展以获得更复杂的例子.这种方法存在吗?
我已经研究过make -d和make -pn选择,据我所知,我认为其中任何一个都不会提供这个特定的输出.
我正在使用make-3.81.
Mad*_*ist 17
替换所有$(eval ...)通话$(info ...).实际上,如果你坚持使用3.81,你可能不得不使用$(warning ...)并忽略额外的输出,因为我认为$(info ...)可能在版本3.82之前不存在.
无论如何,写作:
$(foreach prog,$(PROGRAMS),$(info $(call PROGRAM_template,$(prog))))
Run Code Online (Sandbox Code Playgroud)
(或警告)你会看到解析的内容.
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |