Makefile在后台运行进程

时间:2011-10-05 22:04:40

标签: makefile parallel-processing

我的Makefile中有这个:

run:
     for x in *.bin ; do ./$$x ; done

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

run:
     for x in *.bin ; do ./$$x &; done

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

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

提前谢谢。

3 个答案:

答案 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中运行命令。