Являются ли доказательства одновременно безопасными для всех целей? - PullRequest
1 голос
/ 14 марта 2019

Мне интересно, есть ли какие-либо потенциальные условия гонки при использовании уловок по целям.Так, например, если у меня есть:

all1:
    $(eval X:=1)
    $(eval Y:=1)
    @echo "[$@] X: $(X), Y: $(Y)"

all2:
    $(eval Y:=2);
    $(eval X:=2);
    @echo "[$@] X: $(X), Y: $(Y)"

и затем выполнено

 make all all2 -j

Гарантированы ли X и Y одинаковые значения для одной и той же цели, или можетодин экземпляр целевого расширения потенциально может набросаться на другой по мере его расширения?

(Справочная информация - я отлаживаю несовместимую ошибку make в некоторых make-файлах, которые используют evals для установки некоторых общих переменных для многих целей, и ямне интересно, может ли это быть способствующим фактором)

1 Ответ

1 голос
/ 14 марта 2019

make -j запускает каждое задание в отдельном процессе.Изменения переменных не переносятся между процессами make.

...