我的Makefile中有这个:
run:
for x in *.bin ; do ./$$x ; done
这样它就可以逐个启动所有可执行文件。我想这样做:
run:
for x in *.bin ; do ./$$x &; done
以便它启动每个可执行文件并将其放在后台。当我放入&符号时,上面的语句出现语法错误。
我不想调用make作为make &
,因为这将在后台运行进程但仍然是一个接一个,而我希望单个可执行文件在后台运行,这样在任何时刻我都有一个可执行运行。
提前谢谢。
答案 0 :(得分:13)
尝试通过子shell执行:
run:
for x in *.bin ; do (./$$x &); done
也许make -j
是更好的选择。试试看起来像这样的Makefile
:
BINS = $(shell echo *.bin)
.PHONY: $(BINS)
run: $(BINS)
*.bin:
./$@
然后执行make -j <jobs>
,其中<jobs>
是要运行的同时作业数。
答案 1 :(得分:5)
您获得的语法错误是shell语法错误,而不是make语法的问题。 &符号实际上是command terminator/separator,就像分号一样;所以表达你想要的for循环的方法是:
run:
for x in *.bin ; do ./$$x & done
然而,正如其他人所指出的那样,在实际情况下,通常更灵活地将事物直接表达为依赖关系,而不是复杂的shell片段和shell循环。
答案 2 :(得分:3)
尝试:
run:
for x in *.bin ; do (./$$x &) ; done
()在子shell中运行命令。