Svn 如何在gnu make中使用subversion版本号创建目录?

Svn 如何在gnu make中使用subversion版本号创建目录?,svn,makefile,gnu,Svn,Makefile,Gnu,感谢“Beta版”我的解决方案: RLS_DIRECTORY = $(shell svnversion -cn | sed 's/:/-/') SVN_VERSION = $(shell svnversion -cn | sed -r 's/.+://') RELEASE_NOTES = $(RLS_DIRECTORY:=/release-notes-$(SVN_VERSION:=.txt)) -include svn-version.mk SVN_OLD_VERSION ?= 0 .

感谢“Beta版”我的解决方案:

RLS_DIRECTORY = $(shell svnversion -cn | sed 's/:/-/')
SVN_VERSION   = $(shell svnversion -cn | sed -r 's/.+://')
RELEASE_NOTES = $(RLS_DIRECTORY:=/release-notes-$(SVN_VERSION:=.txt))

-include svn-version.mk

SVN_OLD_VERSION ?= 0

.PHONY = all zip release

release: $(RELEASE_NOTES)

$(RLS_DIRECTORY):
    mkdir -p $@

$(RELEASE_NOTES): $(RLS_DIRECTORY)
    @echo 'Creating release notes ($@)'
    @svn log -r $(SVN_OLD_VERSION):HEAD -v > $@ \
      && echo "SVN_OLD_VERSION ?= `svnversion -c | sed -r 's/.+://'`" \
       > svn-version.mk
简而言之,当我要求
make
这样做(
#make release
)创建一个特定于版本的目录,然后将日志数据转储到自上次调用目标以来的特定于版本的日志文件中。持久性数据(SVN_旧版本)存储在SVN-VERSION.mk中,它有条件地包括在内


原职:

在我的项目“make”文件中的其他特定于subversion的目标(例如)中,我尝试添加一些目标,以便从上次调用“release”目标时创建日志文件。到目前为止:

但我想弄明白两件事:

*一,如何基于
svversion
输出创建目录?
上面给出了一个错误“***目标模式不包含“%%”。停止。”svversion生成“nnnn:mmmm”,我想创建一个目录“nnnn mmmm”。)*


二,我如何才能在执行“release”目标时重新生成包含文件“svn version.mk”?

您的问题并不完全清楚——我对subversion也不熟悉——但我可以有根据地猜测:

  • 使用“shell”(而不是反勾号)设置RLS_DIR: RLS_DIR = $(shell svnversion -cn | sed 's/:/-/') RLS_DIR=$(shell svversion-cn | sed's/:/-/)
  • 这是一种奇怪的安排方式。除非出于其他目的需要svn-version.mk,否则我建议: release: SVN_VERSION ?= $(shell svnversion -c | sed -r 's/.+://') 发布:SVN_版本?=$(shell svversion-c | sed-r's/+:/) 编辑:

    我仍然不完全清楚您试图用svn-version.mk做什么,但是svn-version.mk可以是“发布”的先决条件。如果svn-version.mk依赖于log.txt,则log.txt可以是它的先决条件,否则您将很难防止每次都重新生成svn-version.mk(您可能根本不应该包含它)。

    1的满分。我希望svn-version.mk的内容是持久的:自创建日志输出的上一个版本以来,它被用作参考点。i、 e.在上次运行到现在之间记录日志消息:“svn-log$(svn_版本):HEAD>log.txt;~redo svn VERSION.mk~”我不打算使用POSIX make;我正在利用GNU make提供的条件包含。事实上,我没有为“svn-version.mk”创建特定的规则,而是“release”目标本身的副作用/附加输出。如果我将svn-version.mk作为先决条件,那么我将获得您描述的行为。我希望我上面的“解决方案”能说明我想做什么。 release: SVN_VERSION ?= $(shell svnversion -c | sed -r 's/.+://')