我有以下 Makefile:
build: clean
${GOPATH}/bin/dep ensure
env GOOS=linux go build -o ./bin/status ./lib/status/main.go
elm-app build
init:
${GOPATH}/bin/dep init -v
test:
env GOOS=linux go test -v ./lib/status
strip:
strip ./bin/status
clean:
if [ -f ./bin/status ]; then
rm -f ./bin/status
fi
Run Code Online (Sandbox Code Playgroud)
但我明白了
if [ -f ./bin/status ]; then
/bin/sh: 1: Syntax error: end of file unexpected
Makefile:16: recipe for target 'clean' failed
make: *** [clean] Error 2
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
非常感谢任何建议
makefile 的每一行都在单独的 shell 中运行。这意味着您的规则:
clean:
if [ -f ./bin/status ]; then
rm -f ./bin/status
fi
Run Code Online (Sandbox Code Playgroud)
实际上运行以下命令:
/bin/sh -c "if [ -f ./bin/status ]; then"
/bin/sh -c "rm -f ./bin/status"
/bin/sh -c "fi"
Run Code Online (Sandbox Code Playgroud)
您可以了解为什么会收到此消息。为了确保所有行都发送到单个 shell 中,您需要使用反斜杠来继续这样的行:
clean:
if [ -f ./bin/status ]; then \
rm -f ./bin/status; \
fi
Run Code Online (Sandbox Code Playgroud)
请注意,这意味着您在rm命令后还需要一个分号,以便将它与结尾分开fi。
现在你得到一个像这样的 shell 调用:
/bin/sh -c "if [ -f ./bin/status ]; then \
rm -f ./bin/status; \
fi"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6906 次 |
| 最近记录: |