簡體   English   中英

Makefile如何發送文件夾中目標的“最新”信息?

[英]How makefile sends `is up to date` for target inside a folder?

我的makefile有一個.env的目標,它將僅創建一個.env文件。 當文件已經存在時,我將收到make:`.env'是最新的。

makefile類似於:

.env: .env.sample
    @echo "  ⚠️  Preparing local configuration..."
    @test -f .env && echo "$$DOTENV_ERROR" && exit 1 || true
    @cp .env.sample .env

但是,我希望文件夾中的文件具有相同的行為。 喜歡:

./config/config.json: ./config/config.json.sample
    @echo "  ⚠️  Preparing local configuration..."
    @test -f ./config/config.json && echo "$$CONFIGJSON_ERROR" && exit 1 || true
    @cp config/config.json.sample config/config.json

而不是接收make:'./config/config.json'是最新的。 我收到CONFIGJSON_ERROR ,我想收到同樣的.env消息,說文件是最新的。

我認為存在誤解:如果發生兩種情況中的任何一種,make都會調用配方。 首先是目標文件不存在。 那似乎就是您所依賴的那個。

第二個條件是至少其中一個前提條件比目標條件要新。 在這種情況下,您會失敗,因為目標已經存在,但目標已過期。 這似乎是這里發生的事情:目標config/config.json存在,但config/config.json.sample比它新。

我真的不明白為什么您要在這種情況下拋出錯誤,因此很難提出替代方案。

我不確定您要采取的行為,但我會猜測...

如果目標不存在,或者其依賴項比目標新,則Make將重建目標。 所以在您的情況下,我猜測./config/config.json.sample可能比./config/config.json更新。 如果您不希望復制,即使.sample文件是較新的,那么您也可以使用訂單

./config/config.json: | ./config/config.json.sample
     ...

結果將是.config/config.json僅在不存在的情況下才能重建(假設它沒有其他依賴性)。 如果這兩個文件都不存在,那么./config/config.json.sample會前建成./config/config.json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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