Saya mencoba memasukkan beberapa env vars ke dalam Makefile. File env terlihat seperti:
FOO=bar
BAZ=quux
Perhatikan tidak ada petunjuk export
untuk setiap env var. Jika saya menambahkan yang memimpin export
dan hanya include
file env di Makefile, semuanya berfungsi sebagaimana mestinya. Tapi aku harus tetap memimpin export
. Itu mencegah saya dari hanya menggunakan include envfile
di Makefile.
Saya juga mencoba melakukan sesuatu seperti ini:
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
Tetapi melakukan hal itu menyebabkan membuat kesalahan karena file env tidak ada untuk disertakan.
environment-variables
make
Michael Irwin
sumber
sumber
Jawaban:
Jika Anda menggunakan gnu make, apa yang harus bekerja adalah memasukkan
envfile
file, lalu ekspor daftar vars yang didapat dari file yang sama:sumber
export $(shell...
garis. Saya hanya perluinclude
garis.Saya punya masalah serupa dan mendarat di utas ini. Solusi lain yang mungkin adalah dengan hanya melakukan perintah ekspor tanpa argumen:
Ini akan mengekspor semua variabel make sebagai variabel lingkungan. Perilaku ini mungkin cocok atau tidak cocok dengan semua kasus penggunaan, tapi itu berhasil untuk saya dan tidak melibatkan sihir skrip shell.
sumber
Mempertahankan vars ENV yang sudah ada sebelumnya
Untuk berlari
sumber
Berikut ini adalah solusi elegan yang tidak mengimpor Make vars, tetapi tidak menetapkan ekspor lingkungan untuk subproses shell. Secara pribadi saya lebih suka menjaga skrip dinamis profil saya.
Ada beberapa gotcha. Sayangnya ENV tidak berfungsi, saya pikir seharusnya (tapi itu masalah dengan Bash, bukan Make). Itu juga benar-benar membutuhkan baris lain, karena shell default dari interpreter adalah / bin / sh.
Di sisi atas ini juga memungkinkan untuk memasukkan fungsi shell dalam skrip Makefile, tetapi hanya untuk skrip resep. Saya tidak tahu bagaimana cangkang lain selain Bash ongkos. Dan ada sedikit lebih banyak hal yang terjadi. Saya menaruh beberapa testfile sebagai GIST .
Ada banyak skrip shell rumit yang bisa dibayangkan. Saya suka Tanya Jawab ini terbaik untuk jawaban sederhana.
sumber
jika nama file
.makerc
Anda maka Anda dapat memasukkannya ke Makefile sesederhana ini:Saya lebih suka menambahkan
-
tanda sebelumnyainclude
, untuk menekan peringatan.sumber