感谢'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_OLD_VERSION)存储在svn-version.mk中,有条件地包含在内。
原帖:
我的项目'make'文件中的其他subversion特定目标(例如this)我有一些目标,我试图添加为上次创建日志文件的目的调用'release''目标。到目前为止:
SVN_VERSION ?= 0
-include svn-version.mk
RLS_DIR = `svnversion -cn | sed 's/://'`
.PHONY = $(RLS_DIR) notes release
notes: $(RLS_DIR)\notes.txt
release: notes
svn-version.mk:
@echo 'Generating $@'
@echo "SVN_VERSION ?= `svnversion -c | sed -r 's/.+://'`" > $@
$(RLS_DIR):
mkdir $@
$(RLS_DIR)\notes.txt: $(RLS_DIR)
svn log -r $(SVN_VERSION):HEAD > $@
但我想弄清楚两件事:
* 1。 如何根据svnversion
输出创建目录?上面给出了一个错误“***目标模式不包含'%'。停止。” svnversion生成“nnnn:mmmm”,我想创建一个目录“nnnn-mmmm”。)*
2。 如何在执行'release'目标时重建包含文件“svn-version.mk”?
答案 0 :(得分:2)
你的问题并不完全清楚 - 我不熟悉颠覆 - 但我可以做出有根据的猜测:
RLS_DIR = $(shell svnversion -cn | sed 's/:/-/')
release: SVN_VERSION ?= $(shell svnversion -c | sed -r 's/.+://')
修改:
我仍然不完全清楚你要用svn-version.mk做什么,但svn-version.mk可以是“释放”的先决条件。如果svn-version.mk依赖于log.txt,那么log.txt可能是它的先决条件,否则你将很难阻止svn-version.mk每次都被重建(你可能根本不应该包含它)。