2017-09-27 12 views
0

Visual Studio 2015でC++を使い、Gitをソースコントロールとして使用しています。 私はマルチプラットフォームのアプリケーションを作成しています。私のアプリケーションにgitブランチを組み込み、ビルドされたものをコミットしたいと思います。Visual Studio 2015 - gitブランチとgitコミットでプリプロセッサ変数を定義する

のVisual Studio以外のプラットフォームで

はI私のMakefileに以下の行を置く:

GIT_CUR_COMMIT := $(shell git rev-parse --verify HEAD) 
GIT_CUR_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) 
DEPS += -DGIT_COMMIT=\"$(GIT_CUR_COMMIT)\" -DGIT_BRANCH=\"$(GIT_CUR_BRANCH)\" 

そして、私はこれらのプリプロセッサ変数を読み込み、プログラムによってそれらを公開するためのコードを持っている私のアプリケーションで:

std::string getGitCommit() 
{ 
    #ifdef GIT_COMMIT 
    return GIT_COMMIT; 
    #endif 
    return "unavailable"; 
} 

std::string getGitBranch() 
{ 
    #ifdef GIT_BRANCH 
    return GIT_BRANCH; 
    #endif 
    return "unavailable"; 
} 

しかし、Visual StudioにはMakefileはありません。どのようにコンパイル時にこれらの2つの変数GIT_CUR_COMMITGIT_CUR_BRANCHを定義して同じ動作を達成できますか?おそらく

+0

を使用することができ、それを追加していることを確認します。だから、「メイクファイルはありません」というのは確かではなく、Visual Studioを使ってビルドする方法です。私はあなたがvcprojベースの建物を使用していると仮定しますか? – Yakk

+0

はい、これを明確にしてくれないのは残念です。私はvcprojベースのビルディングを使用しています – fx23

答えて

0

- あなたはVSでそれをまったく同じように行うことができます - しかし、私は次の手順では、プロジェクトのプロパティで

を実装するために多くの方が簡単だろうと感じ、「ビルド・イベント」/「ビルド前イベント」を選択これは、次のヘッダーファイルを生成する必要がありますコマンドライン

echo | set /p dummyName=#define GIT_CUR_COMMIT > gitparams.h 
git rev-parse --verify HEAD >> gitparams.h 

echo | set /p dummyName=#define GIT_BRANCH >> gitparams.h 
git rev-parse --abbrev-ref HEAD >> gitparams.h 

(gitparams.h)たびに

追加次のコマンドを使用するには、プロジェクトのコンパイル

#define GIT_CUR_COMMIT 8a6b3f147fababda57ddd39262df5aa83bc853c4 
#define GIT_BRANCH master 

あなたは

を.gitignoreするそして、あなたのコード内であなたが私は、Visual Studioでmakefileを使用して構築

#include "gitparams.h" 

#define ADD_QUOTES_HELPER(s) #s 
#define ADD_QUOTES(s) ADD_QUOTES_HELPER(s) 

std::string getGitCommit() 
{ 
#ifdef GIT_CURR_COMMIT 
    return ADD_QUOTES(GIT_CURR_COMMIT); 
#endif 
    return "unavailable"; 
} 
+0

クロスプラットフォームのアプリケーションを作成しているので、私のコードは異なるプラットフォームでできるだけ似ていることが望ましいです。あなたは私がVSで行ったことを正確に行う方法があると言いました。あなたはそれが何であるかを詳しく教えていただけますか? – fx23

+0

prebuildステップでいくつかの環境変数を設定し、コンパイルステップでそれを使用することができます。しかし、あなたのためにgitparams.hを生成するクロスプラットフォームメイクファイルを作成しないでください - あなたのコードはすべてのプラットフォームで同じになるでしょうか? –

+0

私はそれを行うことができましたが、私のコードはすでに環境変数で動作しており、可能ならばそれを変更したくはありません。環境変数を使って完全な解決策を書き留めてもいいですか? – fx23

関連する問題