首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile:根据foreach的参数将变量的不同值传递给同一个目标

Makefile:根据foreach的参数将变量的不同值传递给同一个目标
EN

Stack Overflow用户
提问于 2018-05-03 13:00:47
回答 1查看 304关注 0票数 1

我想要达到的目标:,我有3个或更多的测试,需要用单独的标记进行编译。首先,需要使用-ewp进行测试,而rest应该是通过相同目标的ptxas编译器实现的-c。

例如,在下面的调用中,div_sc即$1是依赖于$2(div_sc div_sc1 div_sc)的可执行文件的名称。$2可以有多个带有空格$的测试名称(调用ADD_PTXTEST_EWP、div_sc、div_sc div_sc1 div_sc2)

我所做的:我尝试了以下方法,但是只有变量EWP_SC_SETTER的最后一个值被取下来,而foreach在$2的第一次扫描后失败了

代码语言:javascript
复制
Makefile1:
ADD_PTXTEST_EWP = $(eval $(call _ADD_PTXTEST_EWP,$(strip $1),$(strip $2)))

如果$2中的第一个元素等于$1,则为目标$(1) EWP_SC_SETTER (1).$(ARCHREV).cubin设置变量EWP_SC_SETTER = -c,在Makefile 2中定义该变量

代码语言:javascript
复制
define _ADD_PTXTEST_EWP
$(foreach ptx, $(2), $(if $(filter $1,$(ptx)), $(1).$(ARCHREV).cubin: 
EWP_SC_SETTER = -ewp $(1).$(ARCHREV).cubin: 
$(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTN)$(NEWLINE), $(1).$(ARCHREV).cubin: 
EWP_SC_SETTER = -c $(1).$(ARCHREV).cubin: 
$(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTIN)$(NEWLINE)))
endef

上面没有帮助,所以尝试了另一种方法。不幸的是,这也不起作用。

代码语言:javascript
复制
define _ADD_PTXTEST_EWP
PTXTESTS += $(1)
$(info 1 is $(1))
$(foreach ptx, $(2), $(eval $(call _ADD_PTXTEST_EWP_IMP,$(ptx))))
endef



define _ADD_PTXTEST_EWP_IMP
$(info ptx is $(ptx))
ifeq ($(ptx),div_sc)
$(1).$(ARCHREV).cubin: EWP_SC_SETTER := -ewp
$(info in ptx)
else
$(1).$(ARCHREV).cubin: EWP_SC_SETTER := -c
$(info out ptx)
endif
$(1).$(ARCHREV).cubin: $(ptx).$(ARCHREV).$(RELOC_CUBIN_EXTN)$(NEWLINE)
endef

这个makefile定义了目标值%.$(ARCHREV).cubin

代码语言:javascript
复制
Makefile 2:
%.$(ARCHREV).reloc.cubin: %.$(ARCHREV).ptx
$(call TOOLS_HEADER_DUMP_LOG,PTXAS,cubin)
$(EXE_PREFIX) $(PTXAS) $(call FILE_PTXAS_FLAGS,$*) $(call MAXREG,$*) -arch=sm_$(ARCHREV) **$(EWP_SC_SETTER)** $(G_FLAG) $(patsubst %.reloc.cubin, %.ptx, $@) -o $@ $(call IGNORE_COMPILE_ERR,$*) $(call TOOLS_DUMP_REDIRECT2,2,cubin) $(call PERFTIME_DUMP_REDIRECT, $*.perf.txt)

%.$(ARCHREV).cubin: %.$(ARCHREV)$(RELOC_CUBIN_EXTN) 
$(call TOOLS_HEADER_DUMP_LOG,NVLINK,cubin)
$(EXE_PREFIX) $(NVLINK) $(NVLINK_FLAGS) $(call CNPLIBRARY) $(call FILE_NVLINKFLAGS,$*) $(call MAXREG,$*) -arch=sm_$(ARCHREV) $^ -o $@ $(call IGNORE_LINK_ERR,$*) $(call TOOLS_DUMP_REDIRECT,2,cubin)

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2018-05-05 14:42:21

这似乎是一个简单的问题,包裹在几层不必要的复杂。我们可能需要反复几次才能找到答案。考虑一下这个makefile:

代码语言:javascript
复制
ifeq ($(ptx), div_sc)
 EWP_SC_SETTER = -ewp
else
 EWP_SC_SETTER = -c
endif

cubin:
    @echo using $(EWP_SC_SETTER)

你想做更多的事,但不知道怎么做。那是什么?

编辑:第二次尝试

这个怎么样?

代码语言:javascript
复制
TESTS := alpha beta gamma
TEST_EWP := $(word 1, $(TESTS))

FLAG:=-cj

all-tests: $(TESTS)

$(TEST_EWP): FLAG:=-ewp

$(TESTS):
    @echo running test with $(FLAG)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50155746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档