Subversion のリビジョン番号を C++ プロジェクトに埋め込もうとしていますが、そのための GNU make の設定に問題があります。私のメイクファイルは現在、次のようになっています。
check-svnversion:
../shared/update-svnversion-h.pl
../shared/svnversion.h: check-svnversion
shared/svnversion.o: ../shared/svnversion.h
.PHONY: check-svnversion
svnversion.osvnversion.cpp(パターン ルールを介して) および(何らかの理由で依存svnversion.h関係チェックが検出されないため、明示的にリストされています) に依存します。 svnversion.hスクリプトによって作成および維持されupdate-svnversion-h.plます (基本的にはsvnversion、出力を実行して C++ ファイルに変更するだけです)。
現在、makeファイルを最新の状態にするには、2 回実行する必要があります。初回はmake実行されますがupdate-svnversion-h.pl(前提条件としてリストされているため)、その後のタイムスタンプをチェックしsvnversion.hて によって変更されたことを確認update-svnversion-h.plしないため、 をリメイクしませんsvnversion.o。2回目は、タイムスタンプをチェックし、update-svnversion-h.plとにかく実行し(今回svnversion.hは最新なので何もしません)、再コンパイルsvnversion.cppして make にしsvnversion.oます。
GNU make に単一の前提条件を 2 回評価するか、前提条件のコマンドが終了するまで前提条件のタイムスタンプのチェックを遅らせるように指示する方法はありますか?
または、ソース コードにリビジョン番号を埋め込むより良い方法はありますか? (速度を上げるために、ビルドごとに再コンパイルが必要なソリューションは避けようとしています。)