簡體   English   中英

Makefile目標,無需注意修改時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM