Bir hedefe rastgele bir kabuk komut dosyası yerleştirebilirsiniz. Dosyanın içeriğini bir Makefile değişkeninde tutmak, başka nedenlerden dolayı başka hedeflere de ihtiyacınız olmadıkça, benim için hiçbir anlam ifade etmemektedir. (Eğer öyleyse, zaten komutu ters tırnak kullanamaz.)
target:
@while read -r file; do \
test -e "$$file" && echo "$$file"; \
done <metafile
bu değer ne için, while
döngü ters tırnakların ile for
döngü daha bir kabuk komut dosyası içinde bir dosyanın hattı üzerinden döngü için daha güvenli ve daha deyimsel yoludur Bunu çok görseniz bile.
bir Makefiledaki Bunu yapmanın daha deyimsel yolu bir hedef bağlıdır sahip olmaktır;
(nedense onları görmek gerekiyorsa getirir misin @ komutları shell script yankılandırmasını olun engeller.) Bu dosyalar üzerinde ve Make'in kendi mantığını kullanın: Bu, GNU Make sözdizimidir; Diğer Make flavour'lara (eğer kabuk betiğinin hepsinden önce tercih edilebileceği noktaya) taşınabilir olmak istiyorsanız daha karmaşık olabilir. Her şey bir satırda yankılanacak, ama ayrı çizgilere ihtiyacınız varsa, bu önemsiz bir düzeltme olmalı. Ben sadece küçük bir yardımcı Makefile pasajını inşa etmek ve olurdu
bağımlılıkları şunlardır: Bu açıkça target:
bağımlılıkları listeleyebilirsiniz gerek kalmaz bağımlılıkları küçük listesini oluşturur
target: target.d
target.d: metafile
sed 's/^/target: /' $< >[email protected]
include target.d
; böylece yerine file1 file2 file3
yukarıdaki tarifte, bağımlılıklar Sen target.d
bağımlılığını filtrelemek için gereken
target: file1
target: file2
target: file3
içerecektir hangi oluşturulan target.d
yaşayan (ya da bildirilmeyen bırakın, ben GNU başa gerektiğini olun inanmak) olacaktır.
Bu satırların ikisini de bir tarifte mi deniyorsunuz? Her satır ayrı bir alt kabukta yürütülür. Bir sonraki satıra bir satır ekleyerek '; sonunda. Ama sonra ilk değişken '$$ {LINE}' 'değil (LINE)' olacaktır. – tripleee