VS2013のC++のx86とx64のコンソールアプリを作りました。
この時、ひとつのプロジェクトとして、
1. x86 Debug
2. x86 Release
3. x64 Debug
4. x64 Release
が、バッチビルドのメニューから一度に全部構築できるのでたいへん便利でした。
次にx86とx64用それぞれに対して別々のアイコンとバージョン情報を追加しました。
これもできました。
この時、ABCx86.rcとABCx64.rcのように二つのリソースファイルが必要で、
x86をビルドする時とx64をビルドする時で手動で.rcファイルを切り替えねばなりません。
これが面倒なのでIDEから自動的に切り替えたいです。
どのようにしたらできるでしょうか?
これが知りたいことです。
宜しくお願いします。
------------------
これまでやってみた方法を一つ書きます。
1.x86とx64で共通のABC.rcを作る。
2.プリプロセッサの定義にそれぞれ_x86_と_x64_を書き込み
#ifdef _x86_ などをABC.rcに書き込み条件付きコンパイルを行った。
リソースファイルABC.rcには、入れ子の前処理指令が部分的にしか
機能していないようでうまくいきませんでした。(特にバージョン情報)
一日中やってみたのにうまくできなかったので、全然別の方法を希望します。
自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
構成マネージャを開いて、
[構成プロパティ]-[ビルドイベント]-[ビルド前イベント]にコマンドラインで指定する方法しか思いつきませんね。
#x86、x64用のrcを作成しておいて、ビルド対象のリソースファイルに上書きするという手段
製品版を持っていないので予測ですが
構成プロパティの下に、C/C++、リンカーと同じ階層で「リソース」はありませんかね?
以下の質問はVS2005での話ですがもし「リソース」があるならチェックしてみてください。
リソースのバージョン情報を分岐させるには?
的外れでしたらすみません。
[構成プロパティ]-[ビルドイベント]-[ビルド前イベント]にコマンドラインで指定する方法しか思いつきませんね。
#x86、x64用のrcを作成しておいて、ビルド対象のリソースファイルに上書きするという手段
製品版を持っていないので予測ですが
構成プロパティの下に、C/C++、リンカーと同じ階層で「リソース」はありませんかね?
以下の質問はVS2005での話ですがもし「リソース」があるならチェックしてみてください。
リソースのバージョン情報を分岐させるには?
的外れでしたらすみません。
written by へにっくす
-
Mana
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
リソースを書き換えてひとつにまとめるのはリソースエディタの自動更新と衝突しそうなので避けたほうが良さそうです。
リソースを2つともプロジェクトに登録しておいて構成ごとに必要ないほうをリソースファイルのプロパティで『ビルドから除外』してやるのが正攻法ではないでしょうかね。
リソースを2つともプロジェクトに登録しておいて構成ごとに必要ないほうをリソースファイルのプロパティで『ビルドから除外』してやるのが正攻法ではないでしょうかね。
-
Mana
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
へにっくす氏がリンクしたページでCondition項目に関する記述を見逃してました。
これを利用すればリソースファイルをまとめることもできるのでしょうかね。
こちらの環境はExpressでリソースエディタが付いてないので未確認。
これを利用すればリソースファイルをまとめることもできるのでしょうかね。
こちらの環境はExpressでリソースエディタが付いてないので未確認。
-
浩二
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
へニックスさんありがとうございます。
>>構成マネージャを開いて、
>>[構成プロパティ]-[ビルドイベント]-[ビルド前イベント]にコマンドラインで指定する方法しか思いつきませんね。
>>#x86、x64用のrcを作成しておいて、ビルド対象のリソースファイルに上書きするという手段
VSにこのような機能があるなんて知りませんでした。
なるほどです。
方法が二つあると思います。
バッチファイルを作る。
1.システムコマンドでABC.rcをABCx86.rcまたはABCx64.rcで上書きする。
2.IDE専用のコマンドを調べて、x86,x64毎にABCx86.rcまたはABCx64.rcを
プロジェクトから削除する、追加するの操作をする。
>>製品版を持っていないので予測ですが
>>構成プロパティの下に、C/C++、リンカーと同じ階層で「リソース」はありませんかね?
>>以下の質問はVS2005での話ですがもし「リソース」があるならチェックしてみてください。
ありました。 でもコンパイル前のリソースファイル(.rc)ではなくて、
コンパイルしたリソースファイル(.res)の設定になっています。
リンク先をこれから読んでみます。
結構ここの掲示板のエディターは使いやすいですね。 うまくできてる!
>>構成マネージャを開いて、
>>[構成プロパティ]-[ビルドイベント]-[ビルド前イベント]にコマンドラインで指定する方法しか思いつきませんね。
>>#x86、x64用のrcを作成しておいて、ビルド対象のリソースファイルに上書きするという手段
VSにこのような機能があるなんて知りませんでした。
なるほどです。
方法が二つあると思います。
バッチファイルを作る。
1.システムコマンドでABC.rcをABCx86.rcまたはABCx64.rcで上書きする。
2.IDE専用のコマンドを調べて、x86,x64毎にABCx86.rcまたはABCx64.rcを
プロジェクトから削除する、追加するの操作をする。
>>製品版を持っていないので予測ですが
>>構成プロパティの下に、C/C++、リンカーと同じ階層で「リソース」はありませんかね?
>>以下の質問はVS2005での話ですがもし「リソース」があるならチェックしてみてください。
ありました。 でもコンパイル前のリソースファイル(.rc)ではなくて、
コンパイルしたリソースファイル(.res)の設定になっています。
リンク先をこれから読んでみます。
結構ここの掲示板のエディターは使いやすいですね。 うまくできてる!
-
浩二
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
Manaさんありがとうございました。
>>リソースを書き換えてひとつにまとめるのはリソースエディタの自動更新と衝突しそうなので避けたほうが良さそうです。
>>リソースを2つともプロジェクトに登録しておいて構成ごとに必要ないほうをリソースファイルのプロパティで『ビルドから除外』してやるのが正攻法ではないでしょうかね。
わかりました。 頭に入れておきます。
>>へにっくす氏がリンクしたページでCondition項目に関する記述を見逃してました。
>>これを利用すればリソースファイルをまとめることもできるのでしょうかね。
私の日本語版VS2013にはないみたいです。
リンク先の内容は、Condition項目に記述するとできるではなくて、
>>プロジェクトのプロパティ - 構成プロパティ - C/C++ - プリプロセッサ - プリプロセッサの定義
>>にあり,リソースコンパイラ用の物は
>> プロジェクトのプロパティ - 構成プロパティ - リソース - 全般 - プリプロセッサの定義
>>にあります。
ということのようです。これも知らなかったです。
>>こちらの環境はExpressでリソースエディタが付いてないので未確認。
私のVS2013にも付いていません。
リソースファイルは一番簡単なテキストファイルと同じだったと読んだことがあります。
VS2013では、リソースファイルを開こうとすると、
どのエディターで開きますか?とたくさんメニューが出て選択できるようになっています。
私は、ソースコードエディターで開くを選択して読んでいます。
>>リソースを書き換えてひとつにまとめるのはリソースエディタの自動更新と衝突しそうなので避けたほうが良さそうです。
>>リソースを2つともプロジェクトに登録しておいて構成ごとに必要ないほうをリソースファイルのプロパティで『ビルドから除外』してやるのが正攻法ではないでしょうかね。
わかりました。 頭に入れておきます。
>>へにっくす氏がリンクしたページでCondition項目に関する記述を見逃してました。
>>これを利用すればリソースファイルをまとめることもできるのでしょうかね。
私の日本語版VS2013にはないみたいです。
リンク先の内容は、Condition項目に記述するとできるではなくて、
>>プロジェクトのプロパティ - 構成プロパティ - C/C++ - プリプロセッサ - プリプロセッサの定義
>>にあり,リソースコンパイラ用の物は
>> プロジェクトのプロパティ - 構成プロパティ - リソース - 全般 - プリプロセッサの定義
>>にあります。
ということのようです。これも知らなかったです。
>>こちらの環境はExpressでリソースエディタが付いてないので未確認。
私のVS2013にも付いていません。
リソースファイルは一番簡単なテキストファイルと同じだったと読んだことがあります。
VS2013では、リソースファイルを開こうとすると、
どのエディターで開きますか?とたくさんメニューが出て選択できるようになっています。
私は、ソースコードエディターで開くを選択して読んでいます。
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
うわ,7年以上前に回答した記事が参照されてる……。
それはともかく,Visual Studio 2013にもCondition項目は存在しますし,リソースエディタに相当するリソースビューも付属しています。
# Express Editionは除く。
まず,リソースファイルを追加するとリソースビューにファイルが追加されます。
そして,リソースビューでリソースを追加して該当リソースを選択すると,プロパティウィンドウに(Name), Condition, ID, Languageの各項目と,該当リソース固有のプロパティが表示されます。
ただし,Conditionに指定できるシンボルは一つだけのようなので,X86_DEBUG, X86_RELEASE, X64_DEBUG, X64_RELEASEのようなシンボルを定義しておく必要があります。
一応,何もしないプログラムにバージョンリソースを追加したソリューション一式と,ビルドした結果できあがった各バージョンの実行ファイルを圧縮した物を添付しておきます。
それはともかく,Visual Studio 2013にもCondition項目は存在しますし,リソースエディタに相当するリソースビューも付属しています。
# Express Editionは除く。
まず,リソースファイルを追加するとリソースビューにファイルが追加されます。
そして,リソースビューでリソースを追加して該当リソースを選択すると,プロパティウィンドウに(Name), Condition, ID, Languageの各項目と,該当リソース固有のプロパティが表示されます。
ただし,Conditionに指定できるシンボルは一つだけのようなので,X86_DEBUG, X86_RELEASE, X64_DEBUG, X64_RELEASEのようなシンボルを定義しておく必要があります。
一応,何もしないプログラムにバージョンリソースを追加したソリューション一式と,ビルドした結果できあがった各バージョンの実行ファイルを圧縮した物を添付しておきます。
- 添付ファイル
-
- ConsoleApplication1.zip
- Visual Studio 2013 Professional Update 1 C++ Solution File
- (28.88 KiB) ダウンロード数: 230 回
-
Mana
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
『ビルドから除外』を使えばいちいち削除したり追加したりしなくて済むのです。浩二 さんが書きました:2.IDE専用のコマンドを調べて、x86,x64毎にABCx86.rcまたはABCx64.rcを
プロジェクトから削除する、追加するの操作をする。
頭に入れておくのではなくて同時に試して欲しいものですが。
Expressでも使える方法なのでExpressならこっちですね。
オフトピック
YuO氏の添付ファイルの中のリソースファイルをResEditで開くと中身表示されないし。
-
浩二
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
Manaさんありがとうございます。
「プロジェクトから削除する、追加」は、「プロジェクトから除外する、追加」の意味で書きました。
正確に書かずにすみませんでした。
この方式の各ビルド毎の手動では、できています。 手動ではなく、自動的に行いたいのです。
『ビルドから除外』とは「プロジェクトから除外」のことですよね?
もしも、そうではなくて、『ビルドから除外』できるファイル名をあらかじめ各ビルド毎に指定設定できるメニューがあるならば、
どこにあるか教えていただければありがたいです。 もしも、あれば便利な方法だと思います。
それから、「YuO氏の添付ファイルの中のリソースファイルをResEditで開くと中身表示されないし。」とのことですが、
VS2013では、エディターでも、リソースビューでも内容を見ることができています。 構築もできました。
「プロジェクトから削除する、追加」は、「プロジェクトから除外する、追加」の意味で書きました。
正確に書かずにすみませんでした。
この方式の各ビルド毎の手動では、できています。 手動ではなく、自動的に行いたいのです。
『ビルドから除外』とは「プロジェクトから除外」のことですよね?
もしも、そうではなくて、『ビルドから除外』できるファイル名をあらかじめ各ビルド毎に指定設定できるメニューがあるならば、
どこにあるか教えていただければありがたいです。 もしも、あれば便利な方法だと思います。
それから、「YuO氏の添付ファイルの中のリソースファイルをResEditで開くと中身表示されないし。」とのことですが、
VS2013では、エディターでも、リソースビューでも内容を見ることができています。 構築もできました。
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
プロジェクトから除外とビルドから除外は違いますよ。浩二 さんが書きました:『ビルドから除外』とは「プロジェクトから除外」のことですよね?
もしも、そうではなくて、『ビルドから除外』できるファイル名をあらかじめ各ビルド毎に指定設定できるメニューがあるならば、
どこにあるか教えていただければありがたいです。 もしも、あれば便利な方法だと思います。
ビルドから除外は,対象のファイルをソリューションエクスプローラーで選択後,ファイルのプロパティページを表示 (プロパティウィンドウではないことに注意) すると出てきます。
ただし,この方法で.rcファイルを管理することはお薦めしません。
1プロジェクトに複数の.rcファイルをVisual Studioが取り扱うことを想定していないようで,複数の.rcファイルを追加するとVSのリソースビューまわりの動作がおかしくなります。
ResEditがプリプロセッサ定義に対応していないのでしょう。浩二 さんが書きました:それから、「YuO氏の添付ファイルの中のリソースファイルをResEditで開くと中身表示されないし。」とのことですが、
VS2013では、エディターでも、リソースビューでも内容を見ることができています。 構築もできました。
独自のプリプロセッサ,X86_DEBUG等をプロジェクト設定で定義しており,それが定義されていればVERSIONINFOが使われる,という形で作ってあります。
ResEditにはプリプロセッサ定義を行う場所が無いようですから,Conditionを設定したリソースは全て無視されることになります。
オフトピック
Conditionは,.rc中では#if defined(X86_DEBUG)のような形で使われる
-
浩二
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
YuOさんのプロジェクトは、
1. x86 Debug
2. x86 Release
3. x64 Debug
4. x64 Release
が、バッチビルドのメニューから一度に全部構築できました。
そしてバージョン情報はそれぞれ別々に4種類表示されました。
私のコンソールアプリで同じように操作したところ、
バッチビルドのメニューから一度に同様に全部構築できて、
アイコンとバージョン情報がそれぞれ実行ファイル毎に別々に表示されました。
初めの目標に到達しました。
今、わかったことはどれで、わからないことは何か整理しているところです。
整理できたら再び投稿します。 すごいなーと思っています。
1. x86 Debug
2. x86 Release
3. x64 Debug
4. x64 Release
が、バッチビルドのメニューから一度に全部構築できました。
そしてバージョン情報はそれぞれ別々に4種類表示されました。
私のコンソールアプリで同じように操作したところ、
バッチビルドのメニューから一度に同様に全部構築できて、
アイコンとバージョン情報がそれぞれ実行ファイル毎に別々に表示されました。
初めの目標に到達しました。
今、わかったことはどれで、わからないことは何か整理しているところです。
整理できたら再び投稿します。 すごいなーと思っています。
-
浩二
Re: 自動でVC++コンソールアプリX86とx64のリソースを切り替えたい
YuOさんありがとうございました。
YuOさんのとおりにリソースビュウを設定したところ、
私のコンソールアプリでアイコンとバージョン情報が
それぞれ実行ファイル毎に別々に表示されました。
MFCのGUIでも、試行錯誤でだいぶ時間(一日半)
がかかったのですが同様にできました。
>>プロジェクトから除外とビルドから除外は違いますよ。
「ビルドから除外」の項目を見つけました。
わかりました。知りませんでした。
リソースビューに Conditionの項目は探してみましたらありました。
あること自体知りませんでした。 メインメニューの「表示」メニューには必ず
プロパティページがのメニューがありますが、リソースビューからマウスの右クリックで
プロパティページのメニューが表示されたり、表示されなかったりするので
混乱しました。 どうしてこうなっているのだろう・・・。
リソースビューとリソースファイル(.rc)の関係がよくわからない。
どうも互いに反映するように作られているらしい。
当面知りたいこと。
リソースファイルを正しく書くための文法。
複数のリソースファイルに分割する方法と考え方。
あまりわからないことが多すぎて何がわからないのかも
わかりません。一応解決ということにさせていただきます。
皆様大変有難う御座いました。
YuOさんのとおりにリソースビュウを設定したところ、
私のコンソールアプリでアイコンとバージョン情報が
それぞれ実行ファイル毎に別々に表示されました。
MFCのGUIでも、試行錯誤でだいぶ時間(一日半)
がかかったのですが同様にできました。
>>プロジェクトから除外とビルドから除外は違いますよ。
「ビルドから除外」の項目を見つけました。
わかりました。知りませんでした。
リソースビューに Conditionの項目は探してみましたらありました。
あること自体知りませんでした。 メインメニューの「表示」メニューには必ず
プロパティページがのメニューがありますが、リソースビューからマウスの右クリックで
プロパティページのメニューが表示されたり、表示されなかったりするので
混乱しました。 どうしてこうなっているのだろう・・・。
リソースビューとリソースファイル(.rc)の関係がよくわからない。
どうも互いに反映するように作られているらしい。
当面知りたいこと。
リソースファイルを正しく書くための文法。
複数のリソースファイルに分割する方法と考え方。
あまりわからないことが多すぎて何がわからないのかも
わかりません。一応解決ということにさせていただきます。
皆様大変有難う御座いました。