I have this in my Makefile:
run:
for x in *.bin ; do ./$$x ; done
such that it launches all executables one by one. I want to do this:
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 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.
Try:
run:
for x in *.bin ; do (./$$x &) ; done
The ()'s run the command in a subshell.