URL: <http://savannah.gnu.org/bugs/?27714>
Summary: expansion of $(shell) in target forces serialization of targets Project: make Submitted by: vapier Submitted on: Fri 16 Oct 2009 07:50:48 AM GMT Severity: 3 - Normal Item Group: Bug Status: None Privacy: Public Assigned to: None Open/Closed: Open Discussion Lock: Any Component Version: 3.81 Operating System: POSIX-Based Fixed Release: None Triage Status: None _______________________________________________________ Details: i noticed a package recently that would build serially even when i gave it -j (on a quad machine). looking into it, the reason was that $(shell) was appended to a compiler flag leading to it being expanded when the target was run: CFLAGS += $(shell .....) forcing the $(shell) to be evaluated immediately allowed things to build in parallel: SOME_CHECK := $(shell .....) CFLAGS += $(SOME_CHECK) behavior is seen with make-3.80 and make-3.81 here is a simple example: $ cat makefile t = 0 a b c 1 d e f 2 g h i 3 j k l 4 m n o 5 p q r 6 all: $(t) @echo $(t): @printf $@ $(shell :) $ while make -f makefile -j ; do : ; done 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mno5pqr6 removing the $(shell :) allows for parallel evaluation: 0abc1de2gi3hjkl4mnoqr56p 0abc1de2ghi3jkl4mn5pqor6 0acde21gbhi3jkl4mno5pqr6 0abc1de2ghi3jkl4mn5qr6po 0abc1d2gehi3jkl4o5mpnqr6 0abc1de2ghi3jkl4mno5pq6r 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jl4n5pkqorm6 0abc1de2ghi3jkl4mno5pqr6 0abc1de2ghi3jkl4mnpqor56 _______________________________________________________ Reply to this item at: <http://savannah.gnu.org/bugs/?27714> _______________________________________________ Message sent via/by Savannah http://savannah.gnu.org/ _______________________________________________ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make