【发布时间】:2020-09-14 14:13:10
【问题描述】:
我正在尝试在 Ubuntu 中的 WSL 实例中构建一个项目。我使用的命令来自一个 chirpstack-simulator 项目:docker-compose run --rm chirpstack-simulator make clean build。 由于某种原因,make 拒绝正常工作,或者根本拒绝工作。
我不断收到错误消息:“make: *** No rule to make target 'clean'. Stop.”
这是 Makefile 代码:
VERSION := $(shell git describe --always |sed -e "s/^v//")
build:
@echo "Compiling source"
@mkdir -p build
go build $(GO_EXTRA_BUILD_ARGS) -ldflags "-s -w -X main.version=$(VERSION)" -o build/chirpstack-simulator cmd/chirpstack-simulator/main.go
clean:
@echo "Cleaning up workspace"
@rm -rf build
@rm -rf dist
@rm -rf docs/public
docker-compose.yml 代码:
services:
chirpstack-simulator:
build:
context: .
dockerfile: Dockerfile-devel
command: make
volumes:
- ./:/chirpstack-simulator
还有 Docker-devel 文件:
FROM golang:1.13-alpine
ENV PROJECT_PATH=/chirpstack-simulator
ENV PATH=$PATH:$PROJECT_PATH/build
ENV CGO_ENABLED=0
ENV GO_EXTRA_BUILD_ARGS="-a -installsuffix TDM-GCC-64"
RUN apk add --no-cache ca-certificates tzdata make git bash
RUN mkdir -p $PROJECT_PATH
COPY . $PROJECT_PATH
WORKDIR $PROJECT_PATH
如您所见,构建和清理都已定义。有没有人遇到过这个问题?
编辑: 这是我正在尝试构建的完整项目 https://github.com/brocaar/chirpstack-simulator
还有更多细节:
我试过做
sudo apt-get remove make
sudo apt-get install make
然后
sudo apt-get install --reinstall build-essentials
它仍然给出错误。
Ubuntu 的版本是 16.04 LTS,如果它有助于缩小范围
【问题讨论】:
-
你的 makefile 是不是叫
Makefile(或makefile)(不是Makefile.mak之类的东西)?当您运行 make 时,您的工作目录是包含 makefile 的目录吗?也许添加一个ls和/或pwd作为运行命令,以查看目录的内容以及您所在的目录。 -
@MadScientist 嗨,makefile 名为“Makefile”。我将如何添加这些命令?作为一个整体,我对 Linux/Ubuntu 和 Docker 还是很陌生。我尝试将它们添加到 docker-compose.yml 的 'command': 部分,例如“command: ls pwd make”,但它们被忽略了。我还尝试将它们添加到原始命令中以运行构建“ls | pwd | docker-compose run --rm chirpstack-simulator make clean build”
-
我不太了解 yaml 格式的工作原理;你得问一个码头工人。可能您需要调整问题标签以包含 docker。但是,你绝对不能使用像
ls pwd make这样的东西。您至少需要在它们之间放置分号:ls; pwd; make(不是管道符号)。或者这可能行不通,你应该用ls替换make,看看你得到了什么输出,然后当你弄清楚时放回make。 -
docker-compose run不接受参数。你在换行吗make clean build?另外,我不确定我为什么真的需要 Compose -
老实说,我只是按照自述文件中的命令进行操作。我对 Go/Docker 的第一次体验是在两天前,这不是我通常的工作类型,所以很抱歉,但我没有足够的知识知道什么可以替代这里的任何给定命令。
标签: docker ubuntu makefile docker-compose windows-subsystem-for-linux