Makefile在后台运行进程
我的Makefile中有以下内容:Makefile在后台运行进程,makefile,parallel-processing,Makefile,Parallel Processing,我的Makefile中有以下内容: run: for x in *.bin ; do ./$$x ; done 这样它就一个接一个地启动所有可执行文件。我想这样做: run: for x in *.bin ; do ./$$x &; done 因此,它启动每个可执行文件并将其置于后台。当我输入符号AND时,上面的语句出现语法错误 我不想调用make asmake&,因为这将在后台运行进程,但仍然是一个接一个地运行,而我希望在后台运行单个可执行文件,以便在任何时刻都
run:
for x in *.bin ; do ./$$x ; done
这样它就一个接一个地启动所有可执行文件。我想这样做:
run:
for x in *.bin ; do ./$$x &; done
因此,它启动每个可执行文件并将其置于后台。当我输入符号AND时,上面的语句出现语法错误我不想调用make as
make&
,因为这将在后台运行进程,但仍然是一个接一个地运行,而我希望在后台运行单个可执行文件,以便在任何时刻都有多个可执行文件在运行
提前谢谢。试试:
run:
for x in *.bin ; do (./$$x &) ; done
()在子shell中运行命令。尝试通过子shell执行:
run:
for x in *.bin ; do (./$$x &); done
也许make-j
是一个更好的选择。尝试一个类似以下内容的Makefile
:
BINS = $(shell echo *.bin)
.PHONY: $(BINS)
run: $(BINS)
*.bin:
./$@
然后使用
make-j
执行,其中
是要运行的同时作业数。您得到的语法错误是shell语法错误,而不是make语法问题。符号和实际上是一个,就像分号一样;因此,表示所需for循环的方法是:
run:
for x in *.bin ; do ./$$x & done
然而,正如其他人所指出的,在实用的情况下,通常更灵活地将事物直接表示为make依赖项,而不是复杂的shell片段和shell循环。这是正确的。你必须以某种方式使用多个目标。我用一个建议的Makefile更新了我的答案,这个Makefile应该与-j一起工作。