「ベータ」のおかげで私の解決策:
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固有のターゲット(このような)の中には、最後に「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 > $@
しかし、私は2つのことを理解しようとしています。
*1。出力に基づいてディレクトリを作成するにはどうすればよいですか?svnversion
上記のエラーは「***ターゲットパターンに`%'が含まれていません。停止してください。」というエラーが表示されます。svnversionは「nnnn:mmmm」を生成します。ディレクトリ「nnnn-mmmm」を作成したいと思います。)*
2. 「release」ターゲットが実行されたときにのみ再構築するためにインクルードファイル「svn-version.mk」を取得するにはどうすればよいですか?