Bunun gibi tariflere dikkat edin
target:
MY_ID=$(GENERATE_ID);
echo $MY_ID;
İki şeyi yanlış yapar. Tarifteki ilk satır, ikinci satırdan ayrı bir kabuk örneğinde yürütülür. Değişken bu arada kaybolur. İkinci yanlış olan şey $
ise kaçmamasıdır.
target:
MY_ID=$(GENERATE_ID); \
echo $$MY_ID;
Her iki sorun da düzeltildi ve değişken kullanılabilir. Ters eğik çizgi, her iki satırı tek bir kabukta çalışacak şekilde birleştirir, bu nedenle değişkenin ayarı ve değişken sözcüklerin okunması işe yarar.
Orijinal yazının bir MAKE değişkenine kabuk komutunun sonuçlarının nasıl alınacağını söylediğini ve bu cevabın bir kabuk değişkenine nasıl alınacağını gösterdiğini anlıyorum. Ancak diğer okuyucular faydalanabilir.
Son bir iyileştirme, tüketici bir "ortam değişkeni" ayarlanmasını beklerse, bunu dışa aktarmanız gerekir.
my_shell_script
echo $MY_ID
bunu makefile içinde
target:
export MY_ID=$(GENERATE_ID); \
./my_shell_script;
Umarım birine yardım eder. Genel olarak, tarifler dışında herhangi bir gerçek iş yapmaktan kaçınılmalıdır, çünkü birisi '- kuru çalışma' seçeneğiyle makefile kullanırsa, sadece ne yapacağını GÖRMEK için istenmeyen yan etkileri olmaz. Her $(shell)
çağrı derleme zamanında değerlendirilir ve yanlışlıkla bazı gerçek işler yapılabilir. Kimliğini oluşturmak gibi gerçek işi mümkünse tariflerin içine bırakmak daha iyidir.