Makefile run processes in background

后端 未结 3 905
南笙
南笙 2020-12-19 00:57

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:

相关标签:
3条回答
  • 2020-12-19 01:42

    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.

    0 讨论(0)
  • 2020-12-19 01:51

    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.

    0 讨论(0)
  • 2020-12-19 01:58

    Try:

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

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

    0 讨论(0)
提交回复
热议问题