[英]makefile target without paying attention to modification time
我想要一個規則來創建其任何先決條件,但忽略其修改時間。 可能嗎?
這就是為什么我需要這樣做的原因:我有一個用於創建openssl證書頒發機構和簽署請求的makefile。 對證書進行簽名需要文件index.txt(和另外兩個,但不相關)的存在。
我的規則應為:
index.txt:
touch $@
CA.crt: CA.csr CA.key index.txt
openssl ca .... -updatedb ....
%.crt: %.csr
openssl ca .... -updatedb ....
CA.crt依賴於index.txt的存在,因為openssl如果不存在就不會創建它。 現在,只要我嘗試:
make whatever.crt
index.txt
已更新, CA.crt
在下一次運行時再次重建。
一種解決方案是:
CA.crt: CA.csr CA.key
$(MAKE) index.txt
openssl ca ....
但也許有適當的優雅方法可以正確地做到這一點。 是嗎?
更新:我需要與.PHONY完全相反的東西。 我需要一個一旦生成就永遠不會再創建的目標。 我希望現在這個問題清楚了。
因此,您需要一個“除非存在就創建”目標。 為什么不將這種邏輯放在配方中呢?
target: prereq1 prereq2
if test -r "$@"; then \
touch "$@"; \
else \
**your rule to create target here**; \
fi
touch分支部分是可選的,但可能會最小限度地加快運行速度。 此外,這將使make
考慮到與prereq1和2有關的最新target
。任何編寫良好的makefile在nothing to do
時都應無響應。
您要使用僅訂購的先決條件 。
但是,有時候,您希望對要調用的規則強加特定的順序,但是如果執行了其中一個規則,則不強制更新目標。 在這種情況下,您想定義僅訂購的先決條件。
index.txt:
touch $@
CA.crt: CA.csr CA.key | index.txt
openssl ca .... -updatedb ....
%.crt: %.csr
openssl ca .... -updatedb ....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.