2021/5/3

Makefile : wildcard 用法的一種:檔案在不在

wildcard 用來列舉後面參數的file/path 內容。
也可以用來檢查檔案在不在。
像...
SYSFILES += $(wildcard $(OUT_DIR)/usr/lib/systemd/system/multi-user.target.wants/countssh.service)
這樣,如果 out folder 的 countssh.service 存在的話 (上次 build 的結果還流著,SYSFILES 就會有這個 file link)
如果 out folder 裡沒有這個檔案,wildcard 的結果就是空的。

這樣的 rule,配合之後的刪除動作:
for n in $(SYSFILES); \
do \
rm $(OUT_DIR)/usr/lib/systemd/system/multi-user.target.wants/$$n; \
done
就會把他刪掉。
不直接寫,而用 wildcard 來檢查的原因是...
如果這個檔案不在的話,後面的 rm 動作就會 fail,讓 make 中斷。



另一個,"不在就 create" 的方式..
ifeq (,$(wildcard $(OUT_DIR)/usr/lib/systemd/system/multi-user.target.wants/mender-client.service))
        ln -s ../mender-client.service $(OUT_DIR)/usr/lib/systemd/system/multi-user.target.wants/mender-client.service
endif
用 ifeq,如果 wildcard 的結果是空的,代表那個檔案不存在。

沒有留言:

張貼留言