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&,因为这将在后台运行进程,但仍然是一个接一个地运行,而我希望在后台运行单个可执行文件,以便在任何时刻都

我的Makefile中有以下内容:

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一起工作。