Apa kode paling sederhana untuk mendapatkan bagian direktori tingkat atas dari variabel makefile? Contoh:
BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
PS: Saya tidak bermaksud $(dir $(dir $(BUILD_DIR)))
, tetapi sesuatu yang mendapat bagian direktori pertama dari nilai variabel apa pun .
dirname /tmp/foo/bar
akan memberi/tmp
ataudirname foo/bar/baz
akan memberifoo
/
? Apakah Anda menjamin bahwa argumennya adalah jalur relatif? Apakah Anda mengasumsikan buatan GNU?Jawaban:
Apakah maksud Anda komponen pertama dari direktori? Jika demikian, ubah jalur menjadi daftar komponen, lalu ekstrak komponen pertama. Saya berasumsi Anda menggunakan GNU make, dan Anda tidak melakukan sesuatu yang gila seperti mengharapkan nama file dengan spasi kosong tanpa terluka. Jangan coba ini dengan jalur absolut.
Saya membuat
BUILD_DIR
menimpa apa pun yang mungkin telah dilewati pengguna pada baris perintah, untuk menghindari seseorang secara tidak sengaja melewatkannya dan menghapus sesuatu yang tidak diinginkan.sumber
BUILD_DIR
seharusnya menjadi variabel internal, tetapi Anda benar, masih ada kemungkinan seseorang menetapkannya untuk sesuatu yang berbahaya. Jadi menerima jawaban ini, dengan peringatan bahwa solusinya tidak boleh digunakan :)override BUILD_DIR = …
Jika Anda yakin BUILD_DIR tidak akan pernah memulai dengan '/':
Jika tidak, Anda mungkin perlu memperhitungkan jalur yang dimulai dengan '/':
Atau mungkin yang terbaik adalah mengabaikan jalur apa pun yang dimulai dengan '/'.
sumber
rm -rf
melakukannya nanti. Saya pasti akan menggandakan cek respons yangrootdir
dapat dikembalikan skrip, sehingga Anda tidak berakhir dengan kesalahan sintaks saat memberikan skriprm -rf /
.