Makefile在后台运行进程

jit*_*hsk 10 parallel-processing makefile

我在Makefile中有这个:

run:
     for x in *.bin ; do ./$$x ; done
Run Code Online (Sandbox Code Playgroud)

这样它就可以逐个启动所有可执行文件.我想做这个:

run:
     for x in *.bin ; do ./$$x &; done
Run Code Online (Sandbox Code Playgroud)

这样它就会启动每个可执行文件并将其放在后台.当我放入&符号时,上面的语句出现语法错误.

我不想调用make,make &因为这将在后台运行进程但仍然是一个接一个,而我希望单个可执行文件在后台运行,这样在任何时刻我都有多个可执行文件在运行.

先感谢您.

Mat*_*man 14

尝试通过子shell执行:

run:
     for x in *.bin ; do (./$$x &); done
Run Code Online (Sandbox Code Playgroud)

也许make -j是一个更好的选择.尝试Makefile看起来像这样的东西:

BINS = $(shell echo *.bin)

.PHONY: $(BINS)
run: $(BINS)

*.bin:
    ./$@
Run Code Online (Sandbox Code Playgroud)

然后执行make -j <jobs>哪里<jobs>是要运行的同时作业的数量.


Joh*_*all 5

您获得的语法错误是shell语法错误,而不是make语法的问题.&符号实际上是一个命令终止符/分隔符,就像分号一样; 所以表达你想要的for循环的方法是:

run:
        for x in *.bin ; do ./$$x & done
Run Code Online (Sandbox Code Playgroud)

然而,正如其他人所指出的那样,在实际情况下,通常更灵活地将事物直接表达为依赖关系,而不是复杂的shell片段和shell循环.