一个Makefile问题

愤怒的呆鱼 2020-03-27 03:34:42

define VAR
source := Ng Ho F1 No
SRC := $(foreach L,$$(source),$(L)$(1).cc)
endef

loop := Class
$(eval $(call VAR,$(loop)))

.PHONY:all
all:
@echo "Makefile begin"
@echo "source: " $(source)
@echo "SRC:" $(SRC)
@echo "Makefile end"


各位,以上代码,我希望SRC最终得到的是NgClass.cc HoClass.cc F1Class.cc NoClass.cc
但实际上我执行的结果实这样的

请问下这是为什么?哪里错了?

另外当我把代码稍微修改一下,将source挪到外层
source := Ng Ho F1 No
define VAR
SRC := $(foreach L,$(source),$(L)$(1).cc)
endef

loop := Class
$(eval $(call VAR,$(loop)))

.PHONY:all
all:
@echo "Makefile begin"
@echo "source: " $(source)
@echo "SRC:" $(SRC)
@echo "Makefile end"

它确是正确的结果输出如下:
Makefile begin
source: Ng Ho F1 No
SRC: NgClass.cc HoClass.cc F1Class.cc NoClass.cc
Makefile end
是哪里有问题呢?
...全文
756 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang010 2020-04-11
  • 打赏
  • 举报
回复
因为你的source是定义的宏定义里面: define VAR source := Ng Ho F1 No SRC := $(foreach L,$$(source),$(L)$(1).cc) endef 所以在宏内用的时候需要用$(source)。 如果: source := Ng Ho F1 No define VAR SRC := $(foreach L,$$(source),$(L)$(1).cc) endef 放到外面用$$(source)引用
「已注销」 2020-04-06
  • 打赏
  • 举报
回复
SRC := $(foreach L,$$(source),$(L)$(1).cc) SRC := $(foreach L,$(source),$(L)$(1).cc) 前后两段代码看起来不一样, 猜测你希望的应该是, SRC := $$(foreach L,$$(source),$(L)$(1).cc)

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧