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_directoryistiyorsanı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 cdolursa 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 cdkendinizi 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_dirve Makefileorada ç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. makegibi 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?