Есть ли способ просить gmake никогда не запускать две цели из параллельного набора?
Я не хочу использовать .NOTPARALLEL, потому что он заставляет весь Makefile запускаться последовательно, а не только требуемую часть.
Я мог бы также добавить зависимости, чтобы каждый из них зависел от другого, но тогда (кроме того, что был uglu) мне нужно было бы построить их все, чтобы построить последний, что необязательно.
Причиной, по которой мне это нужно, является то, что (только) часть моего Makefile вызывает ghc --make
, которая сама заботится о своих зависимостях. И это невозможно запустить параллельно в двух разных целях, потому что, если две цели разделяют некоторую зависимость, они могут переписывать друг друга .o
. (Но ghc
отлично с тем, чтобы быть вызванным последовательно.)
Обновление: Чтобы дать конкретный пример. Скажем, мне нужно скомпилировать две программы в файле Makefile:
-
prog1
зависит отprog1.hs
иmylib.hs
; -
prog2
зависит отprog2.hs
иmylib.hs
.
Теперь, если я вызываю ghc --make prog1.hs
, он проверяет свои зависимости, компилирует как prog1.hs
, так и mylib.hs
в свои соответствующие файлы объектов и интерфейсов, а ссылки prog1
. То же самое происходит, когда я вызываю ghc --make prog2.hs
. Поэтому, если две команды будут работать параллельно, одна перезапишет mylib.o
другой, что приведет к ее неудаче.
Однако мне нужно, чтобы ни prog1
не зависело от prog2
и наоборот, потому что они должны компилироваться отдельно. (На самом деле они очень большие с большим количеством модулей и требуют компиляции их всех замедлений развития значительно.)