パソコンでプログラミングしよう ウィンドウズC++プログラミング環境の構築
1.6.3.6(15)
動作確認(1)

ここまでのセットアップを統合開発環境で動作確認する。

コンソールアプリケーションとウィンドウズデスクトップアプリケーションのそれぞれ32ビット/64ビットについてビルド実行を動作確認する。一般情報としてビルドオプションの変更方法を追記してビルドエラーに備える。ウィザード生成プロジェクトをそのまま用いるためアプリケーションの実行は英語入出力となる。日本語入出力の確認はウィンドウズデスクトップアプリケーションについて動作確認(2)の国際化機能として実施する。コンソールアプリケーションの日本語入出力に興味の向きはビルドオプションを変更してご自身で挑戦いただきたい。

外部情報

セットアップ手順

  1. 動作確認ワークスペースの作成
  2. 32ビットコンソールアプリケーション
  3. 64ビットコンソールアプリケーション
  4. 32ビットウィンドウズデスクトップアプリケーション
  5. 64ビットウィンドウズデスクトップアプリケーション

動作確認ワークスペースの作成

Code::Blocksを起動する。ワークスペースが開いていたら[File|Close workspace]して空白ワークスペースに戻す。左側[Management]ウィンドウ[Projects]ページツリービューのルートノードを右クリックし、コンテキストメニュー[Rename workspace]でワークスペース名をTestDriveに変更する。[File|Save workspace as]で空白ワークスペースをC:\Users\user\MinGW\TestDriveディレクトリにTestDrive.workspaceという名前で保存し、これを動作確認ワークスペースとする。

32ビットコンソールアプリケーション

32ビットコンソールアプリケーションはCode::Blocks標準添付ウィザードで生成する。[File|New|Project]の[New from template]ダイアログ[Projects]ページからConsole applicationウィザードを起動し、順次以下のウィザードページに応答する。

  1. イントロウィザードページ。何もせず[Next]を押す。
  2. 言語選択ウィザードページ。[Please make a selection]でC++を選択し[Next]を押す。
  3. プロジェクトパスウィザードページ。プロジェクト名とディレクトリを定義する。[Project title]にプロジェクト名としてConsole1、[Folder to create project in]にプロジェクトディレクトリを作成するディレクトリとしてC:\Users\user\MinGW\TestDriveを入力する。[Next]を押す。
  4. コンパイラ選択とターゲット定義ウィザードページ。[Compiler]はGNU GCC Compiler (32bit)とする。[Create "Debug" configuration]をチェックしてテキストボックスにDebug32を入力し、["Debug" options|Output dir.]にはbin\$(TARGET_NAME)\、["Debug" options|Objects output dir]にはobj\$(TARGET_NAME)\を入力する。[Create "Release" configuration]をチェックしてテキストボックスにRelease32を入力し、["Release" options|Output dir.]にはbin\$(TARGET_NAME)\、["Release" options|Objects output dir]にはobj\$(TARGET_NAME)\を入力する。[Finish]を押す。

ターゲット名をデフォルトから変更するのは後に64ビットターゲットを追加するためであり、ディレクトリ名をビルトイン変数$(TARGET_NAME)(Code::Blocks Manual 3.2.3 Build targets)で置き換えるのは複数ターゲットの出力が間違いなく混在しないようにするためである。ウィザードはこれらの設定を記憶し次回以降のデフォルトとする。

[Project|Build options]で[Project build options]ダイアログを開き左側ツリービューのルートノードConsole1を選択してプロジェクトオプションを修正する。[...|Compiler settings|CompilerFlags]でStatic linking [-static]にチェックを入れランタイムライブラリを静的リンクとする。動的リンクのままでも動作確認できるが静的リンクと決めたほうがトラブルは少ない。[OK]を押して[Project build options]ダイアログを閉じる。

[File|Save everything]で全ての変更を保存する。[Build|Select target|Debug32]を選び[Build|Build and run]でビルドしてアプリケーション実行、コマンドプロンプトが開いてHello world!が出力されるのを確認する。[Build|Select target|Release32]を選び同様の確認を行う。

64ビットコンソールアプリケーション

64ビットコンソールアプリケーションは32ビットターゲットの修正ターゲットとしてプロジェクトに追加する。

  1. [Project|Properties]で[Project/targets options]ダイアログの[Build targets]ページを開く。
  2. [...|Builds targets]でDebug32を選択し[...|Builds targets|Duplicate]で[Duplicate build target]ダイアログを開きDubug64という新しいターゲットへコピーする。
  3. [...|Builds targets]でDebug64を選択し[...|Builds targets|Build options]で[Project build options]ダイアログを開き、左側ツリービューのDubug64が選択されている事を確認して[...|Selected compiler]をGNU GCC Compiler (64bit)に変更し[OK]を押す。[Notice]ダイアログが開き[OK]で応える。
  4. 同様にRelease32をベースにRelease64を作成追加する。[OK]を押して[Project/targets options]ダイアログを閉じる。

[File|Save everything]で全ての変更を保存する。[Build|Select target|Debug64]を選び[Build|Build and run]でビルドしてアプリケーション実行、コマンドプロンプトが開いてHello world!が出力されるのを確認する。[Build|Select target|Release64]を選び同様の確認を行う。

32ビットウィンドウズデスクトップアプリケーション

32ビット/64ビットウィンドウズデスクトップアプリケーションは統合開発環境カスタマイズ(1)で新たに導入したウィザードで生成する。[File|New|Project]の[New from template]ダイアログ[Projects]ページからwxWidgets project (K1)ウィザードを起動し、順次以下のダイアログに応答する。

  1. イントロウィザードページ。何もせず[Next]を押す。
  2. プロジェクトパスウィザードページ。プロジェクト名とディレクトリを設定する。[Project title]にプロジェクト名としてDesktop1、[Folder to create project in]にプロジェクトディレクトリを作成するディレクトリとしてC:\Users\user\MinGW\TestDriveを入力する。[Next]を押す。
  3. プロジェクトコンフィグウィザードページ。ターゲットとGUIタイプを設定する。[Compiler|GNU GCC Compiler (32bit)]と[Compiler|GNU GCC Compiler (64bit)]の両方をチェックし、[GUI Application Type|Frame Based]を選択する。[Finish]を押す。

ウィザードはプロジェクトオプションStatic linking [-static]に既にチェックを入れている。[File|Save everything]で全ての変更を保存する。[Build|Select target|Debug32]を選び[Build|Build and run]でビルドしてアプリケーション実行する。アプリケーションのメインウィンドウが表示され、[Help|About]で[Welcome to]ダイアログが開きwxWidgetsバージョンが示され、[File|Quit]でアプリケーションを終了する。[Build|Select target|Release32]を選び同様の確認を行う。

64ビットウィンドウズデスクトップアプリケーション

前のステップで64ビットターゲットは既に定義されていて新たな追加は必要ない。

[Build|Select target|Debug64]を選び[Build|Build and run]でビルドしてアプリケーション実行する。アプリケーションのメインウィンドウが表示され、[Help|About]で[Welcome to]ダイアログが開きwxWidgetsバージョンが示され、[File|Quit]でアプリケーションを終了する。[Build|Select target|Release64]を選び同様の確認を行う。

ビルドオプション設定

Code::Blocksのビルドオプション設定方法を一般情報として記述する。[Project|Build options]で[Project build options]ダイアログを開く。左側ツリービューにはルートノードにプロジェクト、その子ノードに各ターゲットが表示される。プロジェクトノードを選択して設定するオプションをプロジェクトオプション、ターゲットノードを選択して設定するオプションをターゲットオプションとする。プロジェクトオプションは全てのターゲットに共通でターゲットオプションはそれに追加される。順番が問題となる配列オプションはプロジェクトオプションにターゲットオプションがポリシーに従い追加(無効/置換/前置/後置)される。以下にいくつかの配列オプションを例示する。

オプション 入力コントロール 追加ポリシー
インクルードディレクトリ [...|Search directories|Compiler] [...|Search directories|Compiler|Policy]
ライブラリディレクトリ [...|Search directories|Linker] [...|Search directories|Linker|Policy]
ライブラリファイル [...|Linker settings|Link libraries] [...|Linker settings|Policy]

設定オプションの多くは[...|Selected compiler]で選択されるコンパイラに依存し、プロジェクトオプションコンパイラとターゲットオプションコンパイラが同一でないと矛盾を生じる。本サイト運用は両者がmingw-w64の32ビット/64ビットと異なる場合があるが、設定できるオプションは共通と見なせる。ビルドはターゲットオプションコンパイラが必ず用いられ、プロジェクトオプションコンパイラは共通オプション設定のための存在と言える。ただしエディタコード補完の定義済みマクロはプロジェクトコンパイラの定義が用いられる

ライブラリ関数未定義参照への対処

例えばウィザード生成のウィンドウズデスクトップアプリケーションで、ライブラリバージョンがウィザード作成時とビルド時に差異がある場合に関数未定義参照エラーが発生するかもしれない。さらに具体的に例えれば、サイトバージョン1.1.X.Xウィザードの生成プロジェクトを1.2.X.X環境でビルドすれば以下のエラーが報告される。

...
... : undefined reference to `WebPPictureFree'
... : undefined reference to `WebPIDelete'
...
... : undefined reference to `libdeflate_free_decompressor@4'
... : undefined reference to `libdeflate_free_compressor@4'
...
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 11 second(s))
27 error(s), 2 warning(s) (0 minute(s), 11 second(s))

このようなエラーが発生した場合はメッセージを頼りに不足のライブラリファイルを推定して追加する。ライブラリファイルは標準ディレクトリ(C:\msys64\mingw32\libまたはC:\msys64\ming64\lib)に存在する。[Project|Build options]で[Project build options]ダイアログを開き、全ターゲットノード(Debug32、Release32、Debug64、Release64)の[...|Linker settings|Link libraries]に不足のライブラリファイルを追加する。本具体例では以下の二つを追加すれば良いが、この機会にウィザードも修正すれば万全であろう。

  • libwebp.a
  • libdeflate.a

入力文字コードの変更方法

例えばコンソールアプリケーションを日本語入出力対応とするためにコンパイラ入力文字コードをシフトJISに変更する方法を記述する。[Project|Build options]で[Project build options]ダイアログを開き、変更するノード(プロジェクトノードあるいは特定のターゲットノード)を選択する。[...|Compiler settings|Other compiler options]のリスト末尾に-finput-charset=CP923を追加する。ダイアログを閉じて[Build|Rebuild]する。ビルドオプションの変更はソースコードの変更ではないため、[Build|Build]ではビルドされない点を留意する。

覚え書き
シフトJISを用いるアプリケーションで文字コード変換にiconvライブラリを利用する場合、インクルードファイルiconv.hはコメントにASCII外のUTF-8符号を含み特別に注意しないとコンパイルできない。