Gnu-Make

在 GNU Make 文件中處理的僅訂單先決條件是什麼?

  • May 13, 2021

我一直在閱讀文件,但我仍然不清楚訂單是如何處理的。在範例中:

myrule: | myrule_step1 myrule_step2
   @echo "$(@)"

myrule_step1:
   @echo "$(@)"

myrule_step2:
   @echo "$(@)"

首先列印什麼? myrule_step1還是myrule_step2

順序未指定,可以按任意順序執行。這不僅僅是理論上的問題。它可能發生在並行建構期間。假設與問題中的 Makefile 相同,我執行:

watch -n 0.1 make -j8

列印只需幾秒鐘:

myrule_step2
myrule_step1
myrule

另請參閱Jörg W Mittag 的StackOverflow 答案

不,訂單未定義。這就是使用聲明式面向依賴程式的重點:電腦可以選擇最佳評估順序,或者實際上,甚至可以同時評估它們。

然而,正如 mosvy 所指出的,這僅適用於 GNU Make。POSIX make(可以在 GNU Make 中通過將特殊.POSIX目標添加到您的 makefile 來模擬)在處理先決條件時指定從左到右的順序。

引用自:https://unix.stackexchange.com/questions/218697