Makefile run processes in background
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.
精彩评论