簡體   English   中英

目標特定變量 - 找不到命令錯誤 - 生成文件

[英]Target specific variable - command not found error - makefile

參考文檔,在下面寫了目標特定變量LOGIN_COMMAND

想法是僅在用戶運行make target1時分配此變量


在下面的Makefile中:

target1 : LOGIN_COMMAND := $(shell aws ecr get-login --no-include-email | sed 's|https://||')

target1:
    $(shell LOGIN_COMMAND)
    $(shell ls)

make target1給出以下錯誤:

make: LOGIN_COMMAND: Command not found

如何解決這個錯誤?

我不明白為什么每個人總是在食譜中使用$(shell...) 有什么地方推薦這個嗎? 它是如此無處不在,我從來沒有見過任何這樣做的示例 makefile(這是正確的,因為這真的不是一個好主意)。

反正。 當您添加$(shell LOGIN_COMMAND)時,它會做什么? 它啟動一個 shell 並告訴 shell 運行字符串LOGIN_COMMAND 這不是 shell 知道的命令,所以它給你錯誤“找不到命令”。 嘗試在您的 shell 提示符下鍵入字符串LOGIN_COMMAND :這是一回事。

大概你的意思是變量LOGIN_COMMAND的內容。 為此,您需要將其寫為$(LOGIN_COMMAND)以便 make 知道它是一個變量引用而不是一個字符串。

但是在食譜中使用$(shell...)是多余且令人困惑的,因為食譜已經是一個 shell 腳本。

另外,您根本不清楚您真正想做什么。 您是否嘗試在本地系統上運行ls命令? 或者你想在某個遠程系統上的某個地方運行它?

您想對aws ecr get-login... | sed...的輸出做什么? aws ecr get-login... | sed...操作?

在嘗試編寫 makefile 之前,請確保您可以在 shell 提示符下執行您想要執行的操作。

根據您的評論,下一個可能的解決方案是:

target1:
      aws ecr get-login --no-include-email | sed 's|https://||' | sh

注意尾隨sh

另一種解決方案是創建一個臨時文件並運行它:

AWSSH=output.sh
${AWSSH}:
    aws ecr get-login --no-include-email | sed 's|https://||' > $@
    chmod +x $@

target1: ${AWSSH}
    ./${AWSSH}
    rm -f ${AWSSH}

暫無
暫無

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

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