我有一个非常简单的构建目标,比如
prod:
packr
mkdir -p build/public
cp -r client/public/* build/public/
minify -o build/public/index.html client/public/index.html
minify -o build/public/app.js client/public/app.js
minify -o build/public/normalize.css client/public/normalize.css
gump patch -m "new release!"
$(eval TAG=$(shell git tag -l --sort -version:refname | head -n 1))
packr build -o build/pm -ldflags "-X main.Version=prod -X main.Tag=$(TAG)"
rm -fr build/public
我特别对这三行有问题。
gump patch -m "new release!"
$(eval TAG=$(shell git tag -l --sort -version:refname | head -n 1))
packr build -o build/pm -ldflags "-X main.Version=prod -X main.Tag=$(TAG)"
在纯文本中,它会跳过GIT标签、获取最新版本、构建。
然而,出于某种原因,我还不明白,Makefile
分配了TAG=tagref 1,换句话说,分配的是以前的版本,而不是新构建的版本。
它的行为就像在凹凸发生之前设置了变量一样。
我期望标记赋值会获得使用上一个凹凸命令创建的最后一个标记编号。
发布于 2019-05-22 06:18:27
很少适合在规则的配方中使用make
函数。问题是(除了GNU之外,函数不能移植到make
)是函数在make
读取文件时执行,而在配方中使用它们的人倾向于在配方运行时查找要执行的函数。在某些情况下,这不会有什么不同,但您的情况不在此列。
通过将新标记赋值给make
变量而不是直接使用它,还不清楚您在寻求什么好处:
gump patch -m "new release!"
packr build -o build/pm -ldflags \
"-X main.Version=prod -X main.Tag=$$(git tag -l --sort -version:refname | head -n 1)"
在另一种方法中,确定当前标记被推迟到shell在处理packr
命令时执行,因此它将获得当时的版本。
如果您也需要在其他地方使用该标记,那么您最好的替代方案可能是:
build
https://stackoverflow.com/questions/56246480
复制相似问题