我有这个const RGB_COLOR_BLACK = 0;
const RGB_COLOR_WHITE = 16777215;
const RGB_COLOR_RED = 16711680;
const RGB_COLOR_BRIGHTGREEN = 65280;
const RGB_COLOR_BLUE = 255;
const RGB_COLOR_YELLOW = 16776960;
const RGB_COLOR_PINK = 16711935;
const RGB_COLOR_TURQUOISE = 65535;
const RGB_COLOR_DARKRED = 8388608;
const RGB_COLOR_GREEN = 32768;
const RGB_COLOR_DARKBLUE = 128;
const RGB_COLOR_DARKYELLOW = 8421376;
const RGB_COLOR_VIOLET = 8388736;
const RGB_COLOR_TEAL = 32896;
const RGB_COLOR_GRAY25 = 12632256;
const RGB_COLOR_GRAY50 = 8421504;
const RGB_COLOR_PERIWINKLE_CF = 10066431;
const RGB_COLOR_PLUM_CF = 10040166;
const RGB_COLOR_IVORY_CF = 16777164;
const RGB_COLOR_LIGHTTURQUOISE_CF = 13434879;
const RGB_COLOR_DARKPURPLE_CF = 6684774;
const RGB_COLOR_CORAL_CF = 16744576;
const RGB_COLOR_OCEANBLUE_CF = 26316;
const RGB_COLOR_ICEBLUE_CF = 13421823;
const RGB_COLOR_DARKBLUE_CL = 128;
const RGB_COLOR_PINK_CL = 16711935;
const RGB_COLOR_YELLOW_CL = 16776960;
const RGB_COLOR_TURQUOISE_CL = 65535;
const RGB_COLOR_VIOLET_CL = 8388736;
const RGB_COLOR_DARKRED_CL = 8388608;
const RGB_COLOR_TEAL_CL = 32896;
const RGB_COLOR_BLUE_CL = 255;
const RGB_COLOR_SKYBLUE = 52479;
const RGB_COLOR_LIGHTTURQUOISE = 13434879;
const RGB_COLOR_LIGHTGREEN = 13434828;
const RGB_COLOR_LIGHTYELLOW = 16777113;
const RGB_COLOR_PALEBLUE = 10079487;
const RGB_COLOR_ROSE = 16751052;
const RGB_COLOR_LAVENDER = 13408767;
const RGB_COLOR_TAN = 16764057;
const RGB_COLOR_LIGHTBLUE = 3368703;
const RGB_COLOR_AQUA = 3394764;
const RGB_COLOR_LIME = 10079232;
const RGB_COLOR_GOLD = 16763904;
const RGB_COLOR_LIGHTORANGE = 16750848;
const RGB_COLOR_ORANGE = 16737792;
const RGB_COLOR_BLUEGRAY = 6710937;
const RGB_COLOR_GRAY40 = 9868950;
const RGB_COLOR_DARKTEAL = 13158;
const RGB_COLOR_SEAGREEN = 3381606;
const RGB_COLOR_DARKGREEN = 13056;
const RGB_COLOR_OLIVEGREEN = 3355392;
const RGB_COLOR_BROWN = 10040064;
const RGB_COLOR_PLUM = 10040166;
const RGB_COLOR_INDIGO = 3355545;
const RGB_COLOR_GRAY80 = 3355443;
,我想同时并行运行两个目标,只是为了运行makefile
而不是make
我使用make文件中每个操作系统的makeflags和NPROCS
(这里是达尔文的)
可能吗 ?
make -j...
答案 0 :(得分:2)
是的,有可能,如果NPROCS > 1
并且您的平台支持并行make,那么makefile将执行您想要的操作。例如,参见GNU make manual:
如果您想确保 选项,例如“ -k”(请参阅“选项摘要”),每次运行时都要设置 使。您只需在您的环境中为MAKEFLAGS值即可。您 也可以在makefile中设置MAKEFLAGS,以指定其他标志 该文件也应有效。
如果愿意,您也可以自己进行测试。以下证明了make与NPROCS+1
配方在并行模式下运行。每个配方都会打印第一条消息,睡眠2秒钟,然后打印第二条消息。
如果make以并行模式运行,则应该看到NPROCS
run moduleX with NPROCS=Y
消息已打印,两秒钟后,NPROCS
done moduleX
消息已打印。然后,您应该看到最后一条run moduleX with NPROCS=Y
消息,然后在2秒后看到最后一条done moduleX
消息。
否则,如果它不是在并行模式下运行,您将看到run moduleX with NPROCS=Y
条消息和done moduleX
条消息的交替出现。
演示:
$ cat Makefile
SHELL := bash
NPROCS := $(shell sysctl hw.ncpu | grep -o '[0-9]\+')
MAKEFLAGS += -j$(NPROCS)
MODULES := $(shell for (( i = 1; i <= $(NPROCS) + 1; i++ )); do printf 'module%d ' "$$i"; done)
.PHONY: all $(MODULES)
all: $(MODULES)
$(MODULES):
@echo "run $@ with NPROCS=$(NPROCS)"; sleep 2; echo "done $@"
$ make
run module1 with NPROCS=8
run module2 with NPROCS=8
run module3 with NPROCS=8
run module4 with NPROCS=8
run module5 with NPROCS=8
run module6 with NPROCS=8
run module7 with NPROCS=8
run module8 with NPROCS=8
done module2
done module3
done module6
done module8
done module1
done module7
done module4
done module5
run module9 with NPROCS=8
done module9