Anda tidak bisa melakukan ini. Tidak mungkin¹ proses make dapat mengubah lingkungan induknya (atau direktori saat ini, yang mungkin Anda pikirkan selanjutnya).
Faktanya, bahkan lebih sedikit yang membahagiakan daripada yang Anda pikirkan.
- Tidak semua
make
implementasi mencerminkan penugasan ke PATH
variabel make di lingkungan; GNU make (ditemukan di Linux dan sistem lain) tidak, tetapi BSD make tidak.
- Setiap baris perintah di bawah target berjalan dalam subkulit terpisah. (Kecuali dalam beberapa implementasi BSD yang lebih tua.) Jadi
export PATH
baris tersebut berjalan pada shell yang berakhir segera setelah itu. Bukan berarti baris ini akan melakukan apa pun di tempat pertama - jika PATH
didefinisikan pada titik itu, itu karena sudah ada di lingkungan shell.
Buat adalah untuk membangun sesuatu secara otomatis. Jika Anda ingin mengatur variabel untuk lingkungan interaktif Anda, ini bukan alat yang harus Anda lihat. Alih-alih, tulis snippet shell, dan sumber di shell saat ini:
. ./define-my-variables.sh
Di makefile Anda, sumber skrip di setiap subkulit . Anda bisa menggunakan backslash untuk membuat perintah panjang; ingat bahwa
- Urutan backslash-newline dilucuti oleh make, sehingga shell tidak akan melihat baris baru di sana.
- Ingatlah untuk mengawali setiap baris dengan sebuah tab.
- Perilaku kesalahan Make adalah untuk membatalkan jika suatu perintah gagal. Shell tidak akan melakukan itu secara default, dan kegagalan perintah apa pun tetapi yang terakhir tidak diketahui secara default, jadi Anda harus menjalankannya
set -e
.
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
¹ Wajib catatan: tidak ada cara waras. Bahkan jauh memohon chdir
melalui ptrace
dari debugger tidak akan bekerja seperti kebanyakan kerang karena mereka tidak ingin memiliki direktori mereka saat ini berubah di bawah kaki mereka.