Gnu-Make
在 GNU Make 文件中處理的僅訂單先決條件是什麼?
我一直在閱讀文件,但我仍然不清楚訂單是如何處理的。在範例中:
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 來模擬)在處理先決條件時指定從左到右的順序。