2016-05-20 10 views
2

ich auf Windows 8GNU machen - mehrere Jobs aber MAKEFLAGS hat --jobs gleich 1

C:\Users\<User>\Desktop\A\test_compile>make -v 
GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for Windows32 

machen bin mit Das ist mein Make-Datei

CPP_FILES := $(wildcard *.cpp) 
OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o))) 
LD_FLAGS := -o 

all: $(patsubst %.cpp, %.o, $(wildcard *.cpp)) 
    @echo MAKEFLAGS=$(MAKEFLAGS) 
    rm *.o 

%.o: %.cpp 
    @echo MAKEFLAGS=$(MAKEFLAGS) 
    qcc.exe $(CC_FLAGS) [email protected] $< 

Beachten Sie die @echo MAKEFLAGS=$(MAKEFLAGS) Linie Ich habe für debuggen.

Als ich das Make-Datei laufen make all -j64 ich parallel Arbeitsplätze erhalten - alle meine Kerne aktiv sind - aber das Echo MAKEFLAGS ist:

MAKEFLAGS=-j 1

Warum es nicht sagen MAKEFLAGS=-j 64?

+0

möglich Duplikat mit http://stackoverflow.com/questions/5303553/gnu-make-extracting-argument-to-j-within-makefile – jyvet

Antwort

3

Von manual

Die ‚-j‘ Option ist ein Sonderfall (siehe Parallel Execution). Wenn Sie es auf einen numerischen Wert "N" setzen und Ihr Betriebssystem dies unterstützt (die meisten UNIX-Systeme werden dies tun; andere werden es normalerweise nicht), kommunizieren die Eltern make und alle unter make, um sicherzustellen, dass es nur ' N Jobs, die gleichzeitig zwischen allen laufen. Beachten Sie, dass jeder Job, der rekursiven markiert ist (siehe Instead of Executing Recipes) zählt nicht gegen die Gesamtaufträge (sonst könnten wir bekommen ‚N‘ sub- make s laufen und haben keine Schlitze für eine wirkliche Arbeit übrig!)

Wenn Ihr Betriebssystem unterstützt die obige Kommunikation nicht, dann wird "-j 1" immer in MAKEFLAGS anstelle des von Ihnen angegebenen Werts eingegeben. Dies liegt daran, dass die Option '-j' an unter make s übergeben wird und Sie dadurch viel mehr parallele Jobs erhalten, als Sie angefordert haben.

Ihre Version von make funktioniert parallel Arbeitsplätze unterstützen, aber es hat nicht die notwendigen Maschinen, die Arbeitsplätze zwischen rekursive Aufrufe machen, um zu synchronisieren, so dass es die Jobs 1 in MAKEFLAGS setzt.

Unterstützung für diese Funktion wurde für Windows in make 4.0 hinzugefügt.

+0

Ich werde versuchen, am Montag eine andere Version unter Verwendung der Turns – Adrian

+0

aus http : //gnuwin32.sourceforge.net/packages/make.htm hat nur 3.81 für Windows und ich werde 4.2 selbst kompilieren müssen. – Adrian

+0

Nun, ich habe make 4.2 für Windows und Flags war der richtige Wert. Es stellte sich jedoch heraus, dass es sich um ein Problem handelte, da die vorhandenen Makefiles im Parallelmodus nicht ausführbar waren und ich die Beschleunigung mit Hilfe von Cloud beschleunigen musste. – Adrian