0
我知道,如果我把這個在我Makefile
強制命令並行運行,即使沒有-j?
a: b c
然後運行make -j2 a
然後它會並行運行b
和c
,但如果我總是想b
和c
什麼並行運行,即使用戶不包括-j> = 2?
在我的場景中,b
和c
實際上是從未完成的守護進程,所以我需要它們並行運行。我不希望他們在後臺運行。
我知道,如果我把這個在我Makefile
強制命令並行運行,即使沒有-j?
a: b c
然後運行make -j2 a
然後它會並行運行b
和c
,但如果我總是想b
和c
什麼並行運行,即使用戶不包括-j> = 2?
在我的場景中,b
和c
實際上是從未完成的守護進程,所以我需要它們並行運行。我不希望他們在後臺運行。
這是一個奇怪的使用make
,但如果你想用make
做到這一點, 因爲b
和c
是.PHONY
,你可以這樣做,如:
.PHONY: a b c
a:
$(MAKE) -j2 b c
b c:
while [ "1" ]; do echo "[email protected]: $$(date)"; sleep 1; done
規則:
a: b c
不符合目的。它說,a
取決於b
(正在完成)和 a
取決於c
(正在完成),但你根本不需要。你 只是想a
表示 b
和c
的配方併發執行。
你得到:
$ make b
while [ "1" ]; do echo "b: $(date)"; sleep 1; done
b: Wed Mar 9 18:29:55 GMT 2016
b: Wed Mar 9 18:29:56 GMT 2016
b: Wed Mar 9 18:29:57 GMT 2016
b: Wed Mar 9 18:29:58 GMT 2016
b: Wed Mar 9 18:29:59 GMT 2016
^CMakefile:7: recipe for target 'b' failed
make: *** [b] Interrupt
$ make c
while [ "1" ]; do echo "c: $(date)"; sleep 1; done
c: Wed Mar 9 18:30:38 GMT 2016
c: Wed Mar 9 18:30:39 GMT 2016
c: Wed Mar 9 18:30:40 GMT 2016
c: Wed Mar 9 18:30:41 GMT 2016
c: Wed Mar 9 18:30:42 GMT 2016
^CMakefile:7: recipe for target 'c' failed
make: *** [c] Interrupt
$ make a
make -j2 b c
make[1]: Entering directory '/home/imk/develop/so/parallel_make'
while [ "1" ]; do echo "b: $(date)"; sleep 1; done
while [ "1" ]; do echo "c: $(date)"; sleep 1; done
b: Wed Mar 9 18:31:13 GMT 2016
c: Wed Mar 9 18:31:13 GMT 2016
b: Wed Mar 9 18:31:14 GMT 2016
c: Wed Mar 9 18:31:14 GMT 2016
b: Wed Mar 9 18:31:15 GMT 2016
c: Wed Mar 9 18:31:15 GMT 2016
b: Wed Mar 9 18:31:16 GMT 2016
c: Wed Mar 9 18:31:16 GMT 2016
b: Wed Mar 9 18:31:17 GMT 2016
c: Wed Mar 9 18:31:17 GMT 2016
^CMakefile:7: recipe for target 'b' failed
make[1]: *** [b] Interrupt
Makefile:7: recipe for target 'c' failed
make[1]: *** [c] Interrupt
Makefile:4: recipe for target 'a' failed
make: *** [a] Interrupt
如果您不能運行'B'或'自己C',那麼他們不應該在單獨的規則。 –
@ColonelThirtyTwo呃..誰說你不能自己跑他們?您可以獨立運行它們,但我希望另一個命令/目標可以同時運行它們。 – mpen
因此,目標'b'和'c'實際上沒有*構建*?它們只是 '.PHONY' -ies用於運行命令? –