Die neueste Version von make
hat eine Option --output-sync
die Atom den STDOUT jedes Ziel machen kann, so dass Aussagen von mehreren Zielen verschachtelt sind, nicht bei der Verwendung von make --jobs=N
GNU make 3.81 - wie zu tun ‚--output-sync = target‘
Leider muss ich make v 3.81
verwenden, denn das ist die, die mit unserem SDK kommt.
Um festzustellen, ob ich --output-sync
brauchen, habe ich einige ‚guard Aussagen‘ um meine Ziele
all: $(patsubst %.cpp, %.o, $(wildcard *.cpp))
%.o: %.cpp
@echo BEFORE
@echo MAKEFLAGS=$(MAKEFLAGS)
qcc.exe $(CC_FLAGS) [email protected] $<
@echo AFTER
Der Ausgang sehr verschachtelt wurde.
AFTER
BEFOREAFTER
AFTER
AFTER
Gibt es eine Möglichkeit, die --output-sync
Funktionalität zu emulieren?
Ich verstehe, dass die Baugeschwindigkeit beeinträchtigt werden kann, wenn es zum Beispiel eine Möglichkeit gibt, das Vorrezept "STDOUT Mutex" zu sperren und nach dem Rezept freizugeben.
Mir geht es gut, jedes unserer Ziele zu modifizieren, wenn es das braucht.
Verwenden Sie nicht die Option '-j'? Dadurch wird das Interleaving vermieden, und es ist trivial, das Makefile zu modifizieren, und es entspricht ungefähr allem, was Sie vorhaben, nur einfacher. Ist das Feature nur in GNU Make 4.2? Stellt GNU Make 4.2.1 das Problem, das Sie mit 4.2 haben, wieder her? –
@ JonathanLeffler Ich muss '-j' verwenden, um parallele Builds zu erhalten. Ich werde den Beitrag bezüglich der 'make'-Version aktualisieren. – Adrian