コンパイルされたアプリケーションに、コンパイル中にコミット番号、ソースファイルのチェックサムなどを利用できるようにしたい。
プレーンなMakefileでは、次のようにします。
prog: VERSION source.c
gcc -DVERSION=\"$(shell cat VERSION)\" source.c -o prog
VERSION: .git
git describe > VERSION
qmakeで似たようなものを使用するにはどうすればよいですか?
コンパイルされたアプリケーションに、コンパイル中にコミット番号、ソースファイルのチェックサムなどを利用できるようにしたい。
プレーンなMakefileでは、次のようにします。
prog: VERSION source.c
gcc -DVERSION=\"$(shell cat VERSION)\" source.c -o prog
VERSION: .git
git describe > VERSION
qmakeで似たようなものを使用するにはどうすればよいですか?
バージョン情報を#defineではなくインクルードファイル(たとえば「version.h」)として渡す場合は、qmakeファイルに次を追加できます。
# Define how to create version.h
version.target = version.h
version.commands = <PUT_YOUR_COMMANDS_HERE>
version.depends = .git
QMAKE_EXTRA_TARGETS += version
PRE_TARGETDEPS += version.h
最初の3行は、「version.h」を生成する「version」という新しいターゲットオブジェクトを作成する方法を示しています。コマンド「<PUT_YOUR_COMMANDS_HERE>」を実行して作成します。ターゲットは「.git」に依存しています
「QMAKE_EXTRA_TARGETS」は、「バージョン」と呼ばれる新しいターゲットがあることを示しています。
「PRE_TARGETDEPS」は、「version.h」が他の処理を実行する前に存在する必要があることを示します(まだ作成されていない場合は強制的に作成されます)。
@jwernemyがそれを解決するための良い方法であるとしても、より簡単な解決策:
VERSION = $$system(-git-dir=$PWD/.git <PUT_YOUR_GIT_COMMANDS_HERE>)