因此,我找到了一个链接,显示我应该使用以下内容,但可能我的逻辑在Makefile中是错误的。我需要使用Makefile进行测试,以便在Mac和Windows上工作。映像很好,并且码头容器可以工作,我只是想利用这样一个事实:在Linux/Mac中,可以使用\来缩短命令,而在Windows中,您必须使用回勾(`)。
示例:
.PHONY: validate-lookml
validate-lookml:
UNAME_S=$(shell uname -s)
ifeq ($(UNAME), Linux)
docker run --rm -it -e LOOKER_BASE_URL=${LOOKER_BASE_URL} \
-e LOOKER_CLIENTID=${LOOKER_CLIENTID} \
-e LOOKER_CLIENT_SECRET=${LOOKER_CLIENTSECRET} mirantis/mirantis_spectacles \
lookml \
--base-url ${LOOKER_BASE_URL} \
--client-id ${LOOKER_CLIENTID} \
--client-secret ${LOOKER_CLIENTSECRET} \
--project ${PROJECT} \
--branch ${BRANCH}
endif
ifeq ($(UNAME), Darwin)
docker run --rm -it -e LOOKER_BASE_URL=${LOOKER_BASE_URL} \
-e LOOKER_CLIENTID=${LOOKER_CLIENTID} \
-e LOOKER_CLIENT_SECRET=${LOOKER_CLIENTSECRET} mirantis/mirantis_spectacles \
lookml \
--base-url ${LOOKER_BASE_URL} \
--client-id ${LOOKER_CLIENTID} \
--client-secret ${LOOKER_CLIENTSECRET} \
--project ${PROJECT} \
--branch ${BRANCH}
endif
ifeq ($(UNAME), Windows_NT)
docker run --rm -it -e LOOKER_BASE_URL=${LOOKER_BASE_URL} `
-e LOOKER_CLIENTID=${LOOKER_CLIENTID} `
-e LOOKER_CLIENT_SECRET=${LOOKER_CLIENTSECRET} mirantis/mirantis_spectacles `
lookml `
--base-url ${LOOKER_BASE_URL} `
--client-id ${LOOKER_CLIENTID} `
--client-secret ${LOOKER_CLIENTSECRET} `
--project ${PROJECT} `
--branch ${BRANCH}
endif不幸的是,它不能在Windows上工作,我需要我的Makefile来支持Windows笔记本上的分析人员:
错误:
C:\Users\richa\Git\Mirantis\dataops-looker [main ≡ +0 ~1 -0 !]> make -s validate-lookml
process_begin: CreateProcess(NULL, uname -s, ...) failed.
Makefile:9: pipe: No error
process_begin: CreateProcess(NULL, uname -s, ...) failed.
Makefile:12: pipe: No error
process_begin: CreateProcess(NULL, uname -s, ...) failed.
Makefile:15: pipe: No error
usage: spectacles lookml [-h] [--config-file CONFIG_FILE] --base-url BASE_URL
--client-id CLIENT_ID --client-secret CLIENT_SECRET
[--port PORT] [--api-version API_VERSION] [-v]
[--log-dir LOG_DIR] [--do-not-track]
[--severity {success,info,warning,error,fatal}]
--project PROJECT [--branch BRANCH]
[--remote-reset | --commit-ref COMMIT_REF | --pin-imports PIN_IMPORTS [PIN_IMPORTS ...]]
spectacles lookml: error: argument --base-url: expected one argument
make: *** [Makefile:40: validate-lookml] Error 2发布于 2022-10-14 18:18:44
这里很混乱。
makefile由用两种完全不同的语言编写的行组成:一种是make语言,另一种是shell。不能向shell发送make操作,也不能在make中(直接)运行shell命令。
Make通过使用TAB字符来说明这两者之间的区别。未缩进TAB的行由make解析,与TAB缩进的行被赋予shell。所以,在你的makefile中:
validate-lookml:
UNAME_S=$(shell uname -s)
ifeq ($(UNAME), Linux)
docker run --rm -it -e LOOKER_BASE_URL=${LOOKER_BASE_URL} \这是不对的,因为这里的前两行缩进行是make命令,第三行是shell命令。你应该这样写:
UNAME_S := $(shell uname -s)
validate-lookml:
ifeq ($(UNAME), Linux)
docker run --rm -it -e LOOKER_BASE_URL=${LOOKER_BASE_URL} \
...
endif
ifeq ($(UNAME), Darwin)
...等。
但是,Windows上没有uname命令,所以当您运行此命令时,它将无法工作,这就是为什么您要获得错误process_begin: CreateProcess(NULL,uname -s,.)失败。如果您有GNUmake4.0或更高版本,我建议您查看MAKE_HOST变量并使用它,而不是尝试运行uname。
最后,您不必担心反斜杠的差异,因为make将在启动shell之前解析所有反斜杠并自行删除它们。所以,只需使用反斜杠来继续您的食谱中的所有行,它将在所有不同的平台上以相同的方式工作。
https://stackoverflow.com/questions/74071824
复制相似问题