Aslında komutu yürütür, dizini olarak değiştirir some_directory
, ancak bu bir alt işlem kabuğunda gerçekleştirilir ve ne make ne de çalıştığınız kabuğu etkilemez.
İçinde daha fazla görev yapmak some_directory
istiyorsanız, noktalı virgül eklemeniz ve diğer komutları da eklemeniz gerekir. Yeni satırları kuralın sonu olarak make ile yorumlandıkları için kullanamayacağınızı unutmayın, bu nedenle açıklık için kullandığınız yeni satırların ters eğik çizgiden kaçması gerekir.
Örneğin:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Ayrıca, ters eğik çizgi ve satırsonu eklemenize rağmen, her komut arasında noktalı virgül gerektiğini unutmayın. Bunun nedeni, tüm dizginin kabuk tarafından tek bir satır olarak ayrıştırılmasıdır. Yorumlarda belirtildiği gibi, komutlara katılmak için '&&' işaretini kullanmalısınız; bu, yalnızca önceki komut başarılı olduğunda yürütülecekleri anlamına gelir.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Bu, temizlik gibi yıkıcı işler yaparken, başka türlü yanlış bir şey cd
olursa olsun , yanlış şeyleri yok edeceğiniz için özellikle önemlidir .
Yine de yaygın bir kullanım, bakmak istediğiniz alt dizinde make'i çağırmaktır. Bunun için bir komut satırı seçeneği var, bu yüzden cd
kendinizi aramanıza gerek yok , bu yüzden kuralınız şöyle görünecek
all:
$(MAKE) -C some_dir all
hedef "all" ile oraya dönüşecek some_dir
ve Makefile
orada çalışacaktır . En iyi uygulama olarak, doğru çağrı örneğini çağırmaya özen göstereceğinden (örneğin, yapı ortamınız için özel bir make sürümü kullanıyorsanız) ve ayrıca çalışırken biraz farklı davranışlar sağladığından doğrudan aramak $(MAKE)
yerine kullanın. make
gibi belirli anahtarları kullanarak -t
.
Kayıt için, çıktısı olmasa bile, gördüğünüz komutun yürüttüğü komutu (açıkça bastırılmadıkça) her zaman echos yapın.
make
, dizini asla böyle değiştirmek istemedim. Belki çözümünüz için başka bir yaklaşım denemelisiniz?