我想生成命令:
taskset -c 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ./myprogram
首先尝试:我使用echo:
taskset 0$(shell for n in $(shell seq 1 14);do echo ",$$n";done) ./myprogram
但是echo在迭代之间提供了额外的尾随空间
taskset -c 0,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ./myprogram
,无法识别任务集功能。所以,我试图通过我自己附加字符串,
taskset -c $(shell CORE_NUM=0; for n in $(shell seq 1 14); do CORE_NUM:=$(CORE_NUM)","$$n;done;echo $(CORE_NUM)) ./myprogram
但是,我不熟悉Makefile,我收到了一个错误:
/bin/sh: 1: CORE_NUM:=0,1: not found
/bin/sh: 1: CORE_NUM:=0,2: not found
/bin/sh: 1: CORE_NUM:=0,3: not found
/bin/sh: 1: CORE_NUM:=0,4: not found
....
/bin/sh: 1: CORE_NUM:=0,14: not found
taskset -c 0 ./myprogram
有人可以帮忙修复它吗?
答案 0 :(得分:1)
根本不在这里使用$(shell)
。没有意义。 $(shell)
函数用于在 make 上下文中运行shell命令。但是你现在还没有制造背景。您在配方中的 shell 上下文中,因此只需使用普通的shell命令替换。
taskset -c "0$$(printf ,%s $$(seq 1 14))" ./myprogram