I am trying to parallelize an old Makefile.
In fact I need to make sure that some generator scripts are called not parallel before the compiling procedure starts.
The generators are always called before the compile. Is there any way to establish a somewhat critical section in a makefile?
The Makefile is messy, I'd prefer not to post it here.
You could put the rules for the generated files in a separate Makefile, and do something like this:
generated-sources :
$(MAKE) -f Makefile.Generators
However, with GNU Make, this will be parallel by default. You'll need to suppress it, and the manual isn't exactly clear how you would do that. Maybe some combination of the following would work, depending on which implementations of make you wish to support:
Pass the -j1
flag:
generated-sources :
$(MAKE) -j1 -f Makefile.Generators
Suppress MAKEFLAGS
options:
generated-sources :
$(MAKE) -f Makefile.Generators MAKEFLAGS=
Suppress parallel execution with the following line in Makefile.Generators
:
.NOTPARALLEL :
You can make a rule that runs all of the scripts, and then make sure all of your other rules depend on that rule.
all: ${SOURCES} scripts
scripts: last_script
first_script:
./script1.sh
second_script: first_script
./script2.sh
last_script: second_script
./script3.sh
source1.o: source1.c scripts
gcc source1.c -c -o source1.o
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With