Если вы выполняете некоторую настройку сборки через make, вы можете использовать gmtt, которая представляет собой библиотеку с функциональность, поддерживающая эту задачу. В gmtt можно сформулировать свою задачу так:
include gmtt/gmtt.mk
cfg-table := 2 $(cfg) # make a gmtt-table from the variable
# now select column 1 and 2 from the table for the right test and format the output (without the need to format, just use "select")
smoketest-cfg := $(call map-select,1 2,$(cfg-table),$$(call glob-match,$$1,smoketest*),+uvm_set_config=*$(comma)$$1$(comma)$$2)
regressiontest-cfg := $(call map-select,1 2,$(cfg-table),$$(call glob-match,$$1,regressiontest*),+uvm_set_config=*$(comma)$$1$(comma)$$2)
$(info $(smoketest-cfg))
$(info $(regressiontest-cfg))
$(info -----------------------)
$(info $(subst $(space),$(newline),$(strip $(smoketest-cfg))))
и теперь вы должны иметь возможность называть это так:
make cfg="smoketest-A 1 smoketest-B 2 regressiontest-A 3 regressiontest-B 4"
(gmtt использует таблицы, которые являются просто списками GNUmake, поэтому вы должны использовать пробелы в качестве разделителей элементов и у вас не должно быть пустых «ячеек».)
Выход:
+uvm_set_config=*,smoketest-A,1 +uvm_set_config=*,smoketest-B,2
+uvm_set_config=*,regressiontest-A,3 +uvm_set_config=*,regressiontest-B,4
-----------------------
+uvm_set_config=*,smoketest-A,1
+uvm_set_config=*,smoketest-B,2
Обратите внимание, что вам нужно заключать ,
в выходной формат как $(comma)
(переменная, предоставленная gmtt) из-за щедрой обработки символов make, которая принимает почти все в качестве параметра функции, даже \
, который, следовательно, не помогает как экранирующий символ.
person
Vroomfondel
schedule
17.07.2018
make ... A=3 B=4 C=5
? Или имена переменных (A
,B
,C
) могут быть любыми? - person uzsolt   schedule 15.07.2018