开发者

Makefile run processes in background

开发者 https://www.devze.com 2023-04-11 14:58 出处:网络
I have this 开发者_StackOverflowin my Makefile: run: for x in *.bin ; do ./$$x ; done such that it launches all executables one by one. I want to do this:

I have this 开发者_StackOverflowin my Makefile:

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

such that it launches all executables one by one. I want to do this:

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

so that it starts each executable and puts it in the background. I get a syntax error for the above statement when I put the ampersand.

I dont want to invoke the make as make & since this will run processes in the background but still one by one, whereas I want individual executables to run in the background, so that at any instant I have more than one executable running.

Thank you in advance.


Try to execute via a subshell:

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

Maybe make -j is a better option. Try a Makefile that looks something like this:

BINS = $(shell echo *.bin)

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

*.bin:
    ./$@

And then execute with make -j <jobs> where <jobs> is number of simultaneous jobs to run.


The syntax error you're getting is a shell syntax error, rather than a problem with make syntax. The ampersand is in fact a command terminator/separator, just as semicolon is; so the way to express the for loop you want is:

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

However, as others have noted, where it's practical it's usually more flexible to express things directly as make dependencies rather than complicated shell snippets and shell loops.


Try:

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

The ()'s run the command in a subshell.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号