1

複数のプラットフォームでビルドする C++ プロジェクトがあります。

Mac OSX と Linux では、SConstruct を使用します。これにより、さまざまなコンパイル手順に関して「賢く」することができます。VERSIONつまり、リポジトリのルートにある名前のファイルにプログラムのバージョンを入れることができます。その内容は次のとおりです。

2.0

ビルド SConscript では、そのファイルを開いて読み取り、解析するだけで、それに基づいて動的な定義を作成できます。例えば:

env.Append(CXXFLAGS=['-DVERSION_MAJOR=%s' % open('VERSION').read().split('.')[0]])

これは、明らかな理由から、非常に便利です。たとえば、今日の日付を環境変数に入れることもできます。

Windowsの場合、方法がわからないことを除いて、同様のことをしたい.slnさまざまなファイルを含むファイルがあります。.vcxproj

要約すると、私の質問は次のとおりです。バージョン シフトごとに.sln/ファイルを手動で変更することなく、そのような「スマートな」定義 (ファイルの読み取り、解析、およびその内容をいくつかの環境変数に入れる) を行うにはどうすればよいですか?.vcxproj


Windows でも SCons を使用できることはわかっていますが、使用したくありません (主な理由は、このプラットフォームではあまり人気がないようで、Windows 固有のツールしか知らない潜在的な貢献者を怖がらせたくないからです)。

4

2 に答える 2

1

これを行う一般的な方法は、インクルード ファイルで定数を定義することです。

// Version.h - Autogenerated, don't edit
#define VERSION_MAJOR 1

次に、任意の言語でスクリプトまたはプログラムを記述して、どこかからバージョンを取得し、Version.h を動的に記述します。おそらく、古い Version.h を解析してインクリメントするか、外部ソースから取得します。

ビジュアル スタジオで、Version.h のカスタム ビルド ステップを作成し、ビルドごとに強制的に更新するものに依存させます。

于 2014-05-03T13:08:48.173 に答える
0

MSVSProject()現在のソリューションを維持し、Windows の場合は、ビルダーまたはビルダーを使用して SCons によって生成された Visual Studio ソリューションおよびプロジェクト ファイルと統合できますMSVSSolution()

これらの SCons ビルダーの詳細については、こちらを参照してください。

于 2014-05-03T19:53:59.347 に答える