我在Windows 8上使用make
...ShapelessExperimentsTest.scala:17: could not find implicit value for parameter lgen: shapeless.LabelledGeneric[G]
这是我的makefile
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
注意我为调试添加的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) $@ $<
行。
当我运行makefile @echo MAKEFLAGS=$(MAKEFLAGS)
时,我会得到并行作业 - 我的所有内核都处于活动状态 - 但回显MAKEFLAGS是:
make all -j64
为什么不说MAKEFLAGS=-j 1
?
答案 0 :(得分:3)
来自manual
“
-j
”选项是一种特殊情况(请参阅Parallel Execution)。如果将其设置为某个数值“N
”并且您的操作系统支持它(大多数UNIX系统将支持;其他人通常不支持),父make
和所有子{{1 s将进行通信以确保只有“make
”作业在它们之间同时运行。请注意,任何标记为递归的作业(请参阅Instead of Executing Recipes)都不会计入总工作数(否则我们可能会运行'N
'子N
并且没有剩余的插槽任何真正的工作!)如果您的操作系统不支持上述通信,则“
make
”始终放入-j 1
而不是您指定的值。这是因为如果将“MAKEFLAGS
”选项传递给子-j
,则可以获得比您要求的并行运行的更多作业。
您的make版本确实支持并行作业,但它没有必要的机制来在make的递归调用之间同步作业,因此它将作业设置为make
中的1。
为make 4.0中的窗口添加了对此功能的支持。