Ini sebenarnya mengeksekusi perintah, mengubah direktori untuk some_directory
, bagaimanapun, ini dilakukan dalam shell sub-proses, dan tidak memengaruhi make atau shell yang Anda gunakan.
Jika Anda ingin melakukan lebih banyak tugas di dalam some_directory
, Anda perlu menambahkan titik koma dan menambahkan perintah lain juga. Perhatikan bahwa Anda tidak dapat menggunakan baris baru karena mereka ditafsirkan oleh make sebagai akhir dari aturan, sehingga baris baru yang Anda gunakan untuk kejelasan harus diloloskan oleh backslash.
Sebagai contoh:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Perhatikan juga bahwa titik koma diperlukan di antara setiap perintah meskipun Anda menambahkan garis miring terbalik dan baris baru. Ini disebabkan oleh fakta bahwa seluruh string diurai sebagai satu baris oleh shell. Seperti disebutkan dalam komentar, Anda harus menggunakan '&&' untuk bergabung dengan perintah, yang berarti mereka hanya dieksekusi jika perintah sebelumnya berhasil.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Ini sangat penting ketika melakukan pekerjaan yang merusak, seperti pembersihan, karena Anda akan menghancurkan barang-barang yang salah, jika cd
gagal karena alasan apa pun.
Penggunaan yang umum adalah memanggil make di sub direktori, yang mungkin Anda ingin tinjau. Ada opsi baris perintah untuk ini sehingga Anda tidak perlu memanggil cd
diri sendiri, sehingga aturan Anda akan terlihat seperti ini
all:
$(MAKE) -C some_dir all
yang akan berubah menjadi some_dir
dan mengeksekusi Makefile
di sana dengan target "semua". Sebagai praktik terbaik, gunakan $(MAKE)
alih-alih memanggil make
langsung, karena akan berhati-hati untuk memanggil instance instan yang tepat (jika Anda, misalnya, menggunakan versi make khusus untuk lingkungan build Anda), serta memberikan perilaku yang sedikit berbeda saat menjalankan menggunakan sakelar tertentu, seperti -t
.
Sebagai catatan, buat selalu gema perintah yang dijalankannya (kecuali ditekan secara eksplisit), bahkan jika itu tidak memiliki output, yang adalah apa yang Anda lihat.
make
, saya tidak pernah ingin mengubah direktori seperti ini. Mungkin Anda harus mencoba pendekatan lain untuk solusi Anda?