質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

2回答

4369閲覧

コンパイルオプションによるバージョン情報切り替え

LS_Takao

総合スコア13

0グッド

0クリップ

投稿2018/09/05 10:59

編集2018/09/05 11:08

コンパイルオプション(プリプロセッサの定義)によりアプリケーションのバージョン情報を切り替えたいのですが上手くいきません。
APP_TEST.rcに以下のような定義を行っています。

APP_TEST.rc

1~省略~ 2 3///////////////////////////////////////////////////////////////////////////// 4// 5// Version 6// 7 8VS_VERSION_INFO VERSIONINFO 9 FILEVERSION 1,0,0,1 10#ifdef _OPTION_XX 11 PRODUCTVERSION 1,1,1,1 12#else 13 PRODUCTVERSION 2,2,2,2 14#endif 15 FILEFLAGSMASK 0x3fL 16#ifdef _DEBUG 17 FILEFLAGS 0x1L 18#else 19 FILEFLAGS 0x0L 20#endif 21 FILEOS 0x4L 22 FILETYPE 0x1L 23 FILESUBTYPE 0x0L 24BEGIN 25 BLOCK "StringFileInfo" 26 BEGIN 27 BLOCK "041103a4" 28 BEGIN 29 VALUE "Comments", "APP-X The GUI for debugging software." 30 VALUE "CompanyName", "HOGE HOGE" 31 VALUE "FileDescription", "APP_TEST" 32 VALUE "FileVersion", "1.0.0.1" 33 VALUE "InternalName", "APP_TEST.exe" 34 VALUE "LegalCopyright", "(C) HOGE HOGE. All rights reserved." 35 VALUE "OriginalFilename", "APP_TEST.exe" 36 VALUE "ProductName", "APP_TEST" 37#ifdef _OPTION_XX 38 VALUE "ProductVersion", "1.1.1.1" 39#else 40 VALUE "ProductVersion", "2.2.2.2" 41#endif 42 END 43 END 44 BLOCK "VarFileInfo" 45 BEGIN 46 VALUE "Translation", 0x411, 932 47 END 48END 49 50~省略~

プリプロセッサの定義で「_OPTION_XX」を指定しているのですが、アプリケーションのバージョンが「2.2.2.2」になってしまいます。
バージョン情報のみ別のrcファイル(VersionInfo.rc)として、APP_TEST.rcからincludeしてみましたが、結果は同じでした。
※VersionInfo.rcにて「#ifdef _OPTION_XX」の条件を記述した。

なお、プログラム上で「#ifdef _OPTION_XX」による切り替えは正常に機能しています。

開発環境:Visual Studio 2010 Professional(10.0.40219.1 SP1Rel)

解決方法の御教授を宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

VisualStudio2010が手元になくて確認できませんが

プロジェクトのプロパティ>リソース>全般>プリプロセッサの定義

_OPTION_XXを追加で指定する事で出来ると思いますよ


また、ビルド時のメッセージを注視する必要があったような記憶がかすかにあります。
リソーススクリプトのコンパイルが行われていないようならば
クリーンビルドやリビルドをする必要があるかもしれません。

投稿2018/09/05 12:29

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2018/09/05 12:39

あ、_OPTION_XXという名前はC++のルール上予約された識別子になります。 https://www.jpcert.or.jp/sc-rules/c-dcl37-c.html .rcの場合はC言語とは言い難いので問題ないのかも知れませんが 回避した方が無難な気がします。
LS_Takao

2018/09/06 00:18

asm 様 御回答いただきありがとうございました。 アドバイスいただいた通り「プロジェクトのプロパティ>リソース>全般>プリプロセッサの定義」に"_OPTION_XX"を追加指定したところ期待した結果を得られました。 ※「プロジェクトのプロパティ>C/C++>プリプロセッサ>プリプロセッサの定義」に追加していたことが原因でした。 リソーススクリプトのコンパイルが行われない場合がある件につきまして留意致します。 予約識別子と思われた"_OPTION_XX"ですが、試したところ大丈夫でしたが、好ましくないとの御指摘、理解致しました。 問題を解決することができ助かりました。 ありがとうございました。
guest

0

そのプリプロセッサの定義では実際の記述はどうなってますか?

って、リソースファイルではそれは効かないでしょ。
ソースファイル、あるいはヘッダファイルで #ifdef しましょう

投稿2018/09/05 11:27

編集2018/09/05 11:31
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LS_Takao

2018/09/06 00:20

y_waiwai 様 御回答いただきありがとうございました。 「プロジェクトのプロパティ>リソース>全般>プリプロセッサの定義」に"_OPTION_XX"を追加指定したところ期待した結果を得られました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問