我想要达到的目标:,我有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的第一次扫描后失败了
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中定义该变量
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上面没有帮助,所以尝试了另一种方法。不幸的是,这也不起作用。
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
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)任何帮助都是非常感谢的。
发布于 2018-05-05 14:42:21
这似乎是一个简单的问题,包裹在几层不必要的复杂。我们可能需要反复几次才能找到答案。考虑一下这个makefile:
ifeq ($(ptx), div_sc)
EWP_SC_SETTER = -ewp
else
EWP_SC_SETTER = -c
endif
cubin:
@echo using $(EWP_SC_SETTER)你想做更多的事,但不知道怎么做。那是什么?
编辑:第二次尝试
这个怎么样?
TESTS := alpha beta gamma
TEST_EWP := $(word 1, $(TESTS))
FLAG:=-cj
all-tests: $(TESTS)
$(TEST_EWP): FLAG:=-ewp
$(TESTS):
@echo running test with $(FLAG)https://stackoverflow.com/questions/50155746
复制相似问题