スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Code::Blocks をポータブルに使う(wxWidgets 編)

2016年05月31日(火)23時58分

環境構築

wxWidgets を(Code::Blocks で)使う」という目的のため、これまで長々と下記のような環境構築を続けてきました。

  1. Code::Blocks をポータブルに使う(セットアップ編)
  2. Code::Blocks をポータブルに使う(MinGW32 編)
  3. Code::Blocks をポータブルに使う(MinGW64 編)
  4. wxWidgets 3.1.0 を MinGW でビルド

今回はいよいよ当初の目的であった wxWidgets プロジェクトの作成作業を行います。
その他の作業については「CodeBlocks」タグから一覧可能です。

グローバル変数の設定

まずはじめに、wxWidgets プロジェクトを生成する際に Code::Blocks が参照する wxWidgets の位置情報をグローバル変数として設定しておきます。
Code::Blocks のメニューから「設定 → グローバル変数」で設定画面を呼び出し、「現在の変数」行の「新規」ボタンで新しい変数「wx」を作ります。
作成した「wx」の「base」には「$(CodeBlocks)\Libraries\wxWidgets」と、Code::Blocks の位置を起点とした wxWidgets の格納場所を記載しておきます。

グローバル変数wx

が、実はこの「wx」は今回構築している環境下では使用しません。
ただ Code::Blocks のウィザードが「wx」を標準値として使用し、無ければ強制的に作成させられるために作っておくだけです。
ということで、本命のグローバル変数である下記の二つを上記と同様の手順で作成します。

  1. 「変数名 → wxmingw32」「base → $(CodeBlocks)\Libraries\wxWidgets\MinGW\32」
  2. 「変数名 → wxmingw64」「base → $(CodeBlocks)\Libraries\wxWidgets\MinGW\64」

グローバル変数wxmingw32

ちなみに、Code::Blocks wxWidgets プロジェクトウィザードが使用するのは「base」のみですので、「include」や「lib」の設定は不要です。
むしろせっかく設定しても使用してもらえないため、前回「wxWidgets 3.1.0 を MinGW でビルド」において、「include」フォルダを「lib」フォルダと同じ位置にコピーしていない場合、この「include」欄に「$(CodeBlocks)\Libraries\wxWidgets\include」を記載しておき、プロジェクト生成後に手作業で参照位置を書き換える必要があります。

グローバル変数wxmingw64

wxWidgets project

前準備はこれで終わりましたので、ウィザードで雛形となる基本的な wxWidgets プロジェクトを生成してみます。
まずはメニューの「ファイル → 新規 → プロジェクト」で「wxWidgets project」を「Go」です。

テンプレートから新規作成

確認画面は特に何度も見る理由はないと思われますので、「このページを次回スキップ」にチェックして「次へ」。

Welcome to the new wxWidgets project wizard!

使用する wxWidgets のバージョンですが、Code::Blocks 16.01 ではまだ「wxWidgets 3.1.x」が存在しませんので、とりあえず「wxWidgets 3.0.x」を選んでおきます。

Please select the wxWidgets version you want to use.

「プロジェクトタイトル」は「Test_wxMinGW64」としました。
つまり今回は64ビット版で作ります。

新しいプロジェクトのタイトルを入力してください。

作者情報は別になくても生成可能であるため、とりあえずなにも設定せずに「次へ」。

Please Enter Project Details.

今回は GUI ビルダーの類は使わないため「Preferred GUI Builder」は「なし」にします。
「Application Type」はダイアログ形式ではなく「Frame Based」にしてみました。

Please select your favourite GUI Builder to use.

次のこの質問で事前に準備したグローバル変数を使用します。
今回は64ビット版を作る予定であるため「$(#wxmingw64)」を指定し「次へ」。

Please select the location of wxWidgets on your computer.

「コンパイラー:」は64ビット版を作るので「GNU GCC Compiler 64」にします。

Please select the compiler to use and which configurations you want enabled in your project.

使用する wxWidgets の形式ですが、一つの EXE ファイルのみで実行できるのが好みであるため、今回は静的リンク版にします。
そのため「Use wxWidgets DLL」は非チェックです。
前回「wxWidgets 3.1.0 を MinGW でビルド」で静的リンク版は MONOLITHIC でビルドしているため「wxWidgets is build as a monolithic library」をチェックします。
また、Unicode 版でビルドしているため「Enable unicode」もチェックです。
ついでに、さらに細かい設定もあるようなので「Configure Advanced Options」にもチェックを入れておきます。

Please select various configuration options.

Warning

ここで以下のような内容の Warning が出ます。

A matching Debug configuration cannot be found in the wxWidgets directory you specified.

This means that Debug target of your project will not build.

Are you sure you want to continue with these settings?

A matching Debug configuration cannot be found in the wxWidgets directory you specified.

これは wxWidgets のデバッグ版をビルドしていないにもかかわらず、一つ前の質問で「"Debug"設定を作成」にチェックを入れていた場合にも出ます。
が、今回はそうではなく Code::Blocks 16.01 ではまだ対応していない「wxWidgets 3.1.x」を使用していることが原因です。
つまり Code::Blocks のウィザードは「3.0.x」用の LIB ファイルである「libwxmsw30ud.a」をリンクするファイルとして設定するのですが、「3.1.x」ではこれが「libwxmsw31ud.a」となっており、そのため指定された wxWidgets フォルダに必要なファイルがないとしてこの警告が出るわけです。
これは後で設定を変更することで対処するため、ここは「はい」で進めます。
もう一つ、上記の「Debug」が「Release」に変わっただけの Warning も出ますが、これも理由は同じであるため「はい」です。

A matching Release configuration cannot be found in the wxWidgets directory you specified.

最後に「Advanced options」ですが、せっかくの GCC で、かつ wxWidgets のデバッグ版も作っているのだから、ということで「Use _WXDEBUG_ and Debug wxWidgets lib」をチェックしました。
が、これになんの意味があるのかわからないので、もしかしたらしない方がいいのかもしれません。
また、作るのは GUI アプリケーションですので「GUI Mode Application」に変更し「完了」します。

Please select advanced options.

Hello Code::Blocks user!

とりあえずプロジェクトはできましたが、ビルド前にまず途中で出た Warning の対策をしておきます。
メニューの「プロジェクト → ビルドオプション」で「Debug → リンカ設定 → リンクするライブラリ」にある「libwxmsw30ud.a」を「編集」して「libwxmsw31ud.a」に変更します。

libwxmsw31ud.a

同様に「Release」の「libwxmsw30u.a」も「libwxmsw31u.a」に変えます。

libwxmsw31u.a

また、もし前回「wxWidgets 3.1.0 を MinGW でビルド」において、「include」フォルダを「lib」フォルダと同じ位置にコピーしていない場合、「プロジェクト → ビルドオプション → ディレクトリーの検索」タブの「コンパイラー」および「リソースコンパイラー」に「$(#wxmingw64.include)」を追加(または既に設定されている「$(#wxmingw64)\include」を上書き)する必要があります。

ディレクトリーの検索コンパイラーディレクトリーの検索リソースコンパイラー

ということで「ビルド → ビルドして実行」してみますと、以下の関数が「undefined reference to」と言われてエラーになります。

  • GetFileVersionInfoSizeW(GetFileVersionInfoSize)
  • GetFileVersionInfoW(GetFileVersionInfo)
  • VerQueryValueW(VerQueryValue)

また、以下の関数も「undefined reference to」です。

  • __imp_SHAutoComplete(SHAutoComplete)
  • __imp_AssocQueryStringW(AssocQueryString)

調べてみると前者は「libversion.a」、後者は「libshlwapi.a」に含まれていることがわかりましたので、この二つを「プロジェクト → ビルドオプション → リンカ設定 → リンクするライブラリ」に追加しました。
これも Code::Blocks が現時点(16.01)ではまだ「3.1.x」に対応していないことに要因があると思われます。

libversion.aとlibshlwapi.aを追加

これで再度「ビルド → ビルドして実行」してみたところ、めでたくウインドウが表示されました。

wxWidgets Application Template

ここで生成された「Test_wxMinGW64.exe」は静的リンクされていますので、wxWidgets が存在しない環境下でも EXE ファイル単体で実行可能です。
さらに GCC のリンカーオプションとして「-static-libgcc」「-static-libstdc++」も指定しておけば、完全に単体で実行可能なバイナリになります。
ちなみに、生成された EXE ファイルのサイズは Debug 版が 131MB で Release版が 7MB 程度でした。

【同じタグを付けた記事の一覧】
プログラミング ポータブル C++ CodeBlocks wxWidgets

wxWidgets 3.1.0 を MinGW でビルド

2016年04月30日(土)23時59分

wxWidgets

クロスプラットフォームな GUI ライブラリである wxWidgetsMinGW でビルドします。
ここ数回で進めている「Code::Blocks をポータブルに使う」ための環境構築(「CodeBlocks」タグで一覧可能)の一環ではありますが、今回は Code::Blocks の出番はありません。

フォルダ構成

ポータブル運用が目的であるため、MinGW は環境変数の設定などはしておらず、たんにファイル群を特定フォルダ以下に展開しただけの状態になっています。
そのフォルダ構成は Code::Blocks の位置をルート(「$(CodeBlocks)」)とすると、以下の通りです。

$(CodeBlocks) Compilers MinGW 32 MinGW 4.8.1」格納フォルダ
64 Mingw-w64 5.2.0」格納フォルダ

今回は上記に wxWidgetsMinGW 32ビット版と64ビット版が加わり、以下のようになります。

$(CodeBlocks) Compilers MinGW 32 MinGW 4.8.1」格納フォルダ
64 Mingw-w64 5.2.0」格納フォルダ
Libraries wxWidgets MinGW 32 wxWidgets 3.1.0(32ビット版)」格納フォルダ
64 wxWidgets 3.1.0(64ビット版)」格納フォルダ

wxWidgets 3.1.0 をダウンロード

wxWidgets はバージョン「2.8.x」の時代が長く、 メジャーバージョンが上がった「3.0.x」が出たのはわりに最近の話です。
そしてさらに今はマイナーバージョンも上がった「3.1.0」がリリースされています。
前述のとおり「2.8.x」時代が長かったため、ネット上に存在する関連情報やオープンソースプロジェクトは「2.8.x」を前提にしたものが多かったりするのですが、いずれは新しいもので置き換わっていくのだろうということで、今回は最新である「3.1.0」を使うことにしました。
ということで、Downloads ページから「Source Code」欄にある「Windows ZIP(または Windows 7Z)」をダウンロードします。

wxWidgets の展開と配置

目的は「Code::Blocks を軸に丸ごと持ち運べる開発環境」の構築です。
いずれは wxWidgets 以外の何かしらのライブラリも追加するかもしれませんので、Code::Blocks フォルダ内に「Libraries」フォルダを作り、wxWidgets はそこに配置することにしました。
つまり「$(CodeBlocks)\Libraries\wxWidgets」フォルダを生成し、その中にダウンロードした wxWidgets を解凍(展開)して得られたファイル群を配置します。
さらに、上記ファイル群をビルドして得られる DLL 等の生成物を置いておくため場所として、 「wxWidgets」フォルダ以下に「MinGW\32」フォルダと「MinGW\64」フォルダも作っておきます。

「MONOLITHIC な Static 版」と「非 MONOLITHIC な Dynamic 版」を作る

wxWidgets のビルドに入る前に、いくつかの方針を決める必要があります。

「ANSI」か「Unicode」か

まず、「ANSI」か「Unicode」かについては、wxWidgets 3.0 からは「Unicode」がデフォルトとなり、「ANSI」は非推奨で近い将来サポート外になると書かれていますので、「Unicode」一択です。

「Release」のみか「Debug」もか

次に、「Release」のみにするか「Debug」も作るかですが、何か困った時に Debug 版も必要になるかもしれないため、一応「Release」と「Debug」の両方を作ります。

「Static(静的リンク版)」か「Dynamic(DLL版)」か

また、「Static(静的リンク版)」か「Dynamic(DLL版)」かの選択肢も「両方」です。
個人的には「実行ファイルひとつ」が好みであるため静的リンク版しか使わない気もしますが、いつか使う可能性もないとは言えないため DLL 版も作ることにしました。

「MONOLITHIC(全機能を一ファイルにまとめる)」か「非MONOLITHIC(機能ごとに別々のファイルに分割)」か

そして、「静的リンク版はMONOLITHIC」、「DLL 版は非 MONOLITHIC」でビルドします。
本来 Static 版こそ非 MONOLITHIC で作り、選択的にリンクすることでバイナリサイズを減らすべきものだと思うのですが、実際に簡単なサンプルを Code::Blocks でビルドして試したところ、生成される実行ファイルのサイズに大差はありませんでした。
おそらくリンク時に不要な部分を削り取ってくれるオプションのようなものが付けられているのかと思いますが、そういうことであれば生成時にいちいち「どの機能が必要なのか」を考える必要がなく、まとめてひとつ指定するだけの MONOLITHIC 版の方が簡単でいいということになります。
そして Dynamic 版の方ですが、わざわざ「要 DLL な実行ファイル」をビルドしている時点で、配布時のファイル数の増加などは諦めていると思われますので、機能ごとにばらばらにファイル化されていても問題ないはず、ということから非 MONOLITHIC に決定しました。

32ビット版のビルド

ということで、まずは32ビット版をビルドします。
まず「$(CodeBlocks)\Libraries\wxWidgets\MinGW\32」フォルダに以下の内容をコピーした BAT ファイル「wxWidgets_MinGW_32_Build.bat」を作ります(別にファイル名は何でもいいのですが)。

::各種パス設定。先頭「CODEBLOCKS」にルートを設定することで全体の位置を制御可能。
SET CODEBLOCKS=D:\PortableApps\CodeBlocks
SET MINGW=%CODEBLOCKS%\Compilers\MinGW\32
SET WXWIDGETS=%CODEBLOCKS%\Libraries\wxWidgets
SET PATH=%MINGW%\bin
cd /d "%WXWIDGETS%\build\msw"

::事前に「%WXWIDGETS%\lib\gcc_lib\mswu\wx\msw」「\wxWidgets\lib\gcc_lib\mswud\wx\msw」フォルダを生成しておかないとビルド時にファイルコピーに失敗し詰まる。
IF NOT EXIST %WXWIDGETS%\lib mkdir %WXWIDGETS%\lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib mkdir %WXWIDGETS%\lib\gcc_lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu mkdir %WXWIDGETS%\lib\gcc_lib\mswu
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud mkdir %WXWIDGETS%\lib\gcc_lib\mswud
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu\wx mkdir %WXWIDGETS%\lib\gcc_lib\mswu\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud\wx mkdir %WXWIDGETS%\lib\gcc_lib\mswud\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu\wx\msw mkdir %WXWIDGETS%\lib\gcc_lib\mswu\wx\msw
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud\wx\msw mkdir %WXWIDGETS%\lib\gcc_lib\mswud\wx\msw

::以下Buildコマンド群。
::「-j4」は並行処理数の指定でCPUのコア数に応じて設定。
::末尾の「2>&1」は標準出力と標準エラーを同一のファイルにリダイレクトするためのコマンド。
::「%~dp0」は実行しているBATファイルのパス。

::「静的リンク + 非モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build00R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build00D.log 2>&1

::「静的リンク + モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build01R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build01D.log 2>&1

::事前に「%WXWIDGETS%\lib\gcc_dll\mswu\wx\msw」「\wxWidgets\lib\gcc_dll\mswud\wx\msw」フォルダを生成しておかないとビルド時にファイルコピーに失敗し詰まる。
IF NOT EXIST %WXWIDGETS%\lib mkdir %WXWIDGETS%\lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll mkdir %WXWIDGETS%\lib\gcc_dll
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu mkdir %WXWIDGETS%\lib\gcc_dll\mswu
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud mkdir %WXWIDGETS%\lib\gcc_dll\mswud
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu\wx mkdir %WXWIDGETS%\lib\gcc_dll\mswu\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud\wx mkdir %WXWIDGETS%\lib\gcc_dll\mswud\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu\wx\msw mkdir %WXWIDGETS%\lib\gcc_dll\mswu\wx\msw
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud\wx\msw mkdir %WXWIDGETS%\lib\gcc_dll\mswud\wx\msw

::「動的リンク + 非モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build10R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build10D.log 2>&1

::「動的リンク + モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build11R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_32_Build11D.log 2>&1

pause

上記 BAT ファイルを実行する前に、最低限2行目の「SET CODEBLOCKS=C:\CodeBlocks」の部分を、実際の Code::Blocks 配置フォルダ位置に書き換える必要があります。
また、各ビルドコマンドについている「-j4」は並行処理数の指定です。
自分が現在4コアの CPU を使用しているため「-j4」としていますが、ビルドに使用する PC の CPU(コア)数に合わせて書き換えます。
もう一つ、「-std=gnu++11」オプションについてですが、3.1.0 では付けても付けなくてもビルドできますのでどちらでも構いません(付ける場合は「CXXFLAGS+="-O3 」のうしろ辺りに追加)。
ただし 3.0.2 で64ビット版の場合は「-std=gnu++11」を付けないとビルド不可でした(32ビット版はなぜか付けなくてもビルド可能)。
書き換えが済めば BAT ファイル実行でビルドを開始します。
ちなみに全ビルド完了までにかなりの時間を要しました(うちの環境では確か1時間と少しぐらい)。

32ビット版の配置と clean

ビルドが完了したら「$(CodeBlocks)\Libraries\wxWidgets」フォルダの「include」と「lib」の2フォルダを「$(CodeBlocks)\Libraries\wxWidgets\MinGW\32」フォルダにコピーします。
…実際のところ「include」フォルダは32ビット版も64ビット版も同一で、ビルド時に何かの変化があるわけではありません。
わざわざコピーするのは Code::Blocks のウィザードで wxWidgets のプロジェクトを生成すると「include」と「lib」が同じ場所に存在することを前提とした設定がされてしまうため、別々の位置に置いておくと余計な手間がかかるためです。
なのでプロジェクト生成後に手動で指定するという場合は、「include」フォルダのコピーは不要ということになります。
コピーが終われば、32ビット版をビルドするために生成された各種ファイルの削除作業です。
「$(CodeBlocks)\Libraries\wxWidgets\MinGW\32」フォルダに以下の内容をコピーした BAT ファイル「wxWidgets_MinGW_32_Clean.bat」を作り、必要箇所を書き換え(書き換えるポイントはビルド BAT と同じ)た上で実行します。

::各種パス設定。先頭「CODEBLOCKS」にルートを設定することで全体の位置を制御可能。
SET CODEBLOCKS=C:\CodeBlocks
SET MINGW=%CODEBLOCKS%\Compilers\MinGW\32
SET WXWIDGETS=%CODEBLOCKS%\Libraries\wxWidgets
SET PATH=%MINGW%\bin
cd /d "%WXWIDGETS%\build\msw"

::以下Cleanコマンド群。
::CleanコマンドはBuildコマンドの末尾に「clean」をつけるだけ。
::「-j4」は並行処理数の指定でCPUのコア数に応じて設定。
::末尾の「2>&1」は標準出力と標準エラーを同一のファイルにリダイレクトするためのコマンド。
::「%~dp0」は実行しているBATファイルのパス。

::「静的リンク + 非モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean00R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean00D.log 2>&1

::「静的リンク + モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean01R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean01D.log 2>&1

::「動的リンク + 非モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean10R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean10D.log 2>&1

::「動的リンク + モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean11R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_32_Clean11D.log 2>&1

pause

64ビット版のビルド

次は64ビット版のビルドですが、大体「32」の部分が「64」に変わる程度の違いしかありませんので、以下に「wxWidgets_MinGW_64_Build.bat」と「wxWidgets_MinGW_64_Clean.bat」だけを貼っておきます。

wxWidgets_MinGW_64_Build.bat

::各種パス設定。先頭「CODEBLOCKS」にルートを設定することで全体の位置を制御可能。
SET CODEBLOCKS=C:\CodeBlocks
SET MINGW=%CODEBLOCKS%\Compilers\MinGW\64
SET WXWIDGETS=%CODEBLOCKS%\Libraries\wxWidgets
SET PATH=%MINGW%\bin
cd /d "%WXWIDGETS%\build\msw"

::事前に「%WXWIDGETS%\lib\gcc_lib\mswu\wx\msw」「\wxWidgets\lib\gcc_lib\mswud\wx\msw」フォルダを生成しておかないとビルド時にファイルコピーに失敗し詰まる。
IF NOT EXIST %WXWIDGETS%\lib mkdir %WXWIDGETS%\lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib mkdir %WXWIDGETS%\lib\gcc_lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu mkdir %WXWIDGETS%\lib\gcc_lib\mswu
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud mkdir %WXWIDGETS%\lib\gcc_lib\mswud
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu\wx mkdir %WXWIDGETS%\lib\gcc_lib\mswu\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud\wx mkdir %WXWIDGETS%\lib\gcc_lib\mswud\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswu\wx\msw mkdir %WXWIDGETS%\lib\gcc_lib\mswu\wx\msw
IF NOT EXIST %WXWIDGETS%\lib\gcc_lib\mswud\wx\msw mkdir %WXWIDGETS%\lib\gcc_lib\mswud\wx\msw

::以下Buildコマンド群。
::「-j4」は並行処理数の指定でCPUのコア数に応じて設定。
::末尾の「2>&1」は標準出力と標準エラーを同一のファイルにリダイレクトするためのコマンド。
::「%~dp0」は実行しているBATファイルのパス。

::「静的リンク + 非モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build00R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build00D.log 2>&1

::「静的リンク + モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build01R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build01D.log 2>&1

::事前に「%WXWIDGETS%\lib\gcc_dll\mswu\wx\msw」「\wxWidgets\lib\gcc_dll\mswud\wx\msw」フォルダを生成しておかないとビルド時にファイルコピーに失敗し詰まる。
IF NOT EXIST %WXWIDGETS%\lib mkdir %WXWIDGETS%\lib
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll mkdir %WXWIDGETS%\lib\gcc_dll
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu mkdir %WXWIDGETS%\lib\gcc_dll\mswu
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud mkdir %WXWIDGETS%\lib\gcc_dll\mswud
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu\wx mkdir %WXWIDGETS%\lib\gcc_dll\mswu\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud\wx mkdir %WXWIDGETS%\lib\gcc_dll\mswud\wx
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswu\wx\msw mkdir %WXWIDGETS%\lib\gcc_dll\mswu\wx\msw
IF NOT EXIST %WXWIDGETS%\lib\gcc_dll\mswud\wx\msw mkdir %WXWIDGETS%\lib\gcc_dll\mswud\wx\msw

::「動的リンク + 非モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build10R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build10D.log 2>&1

::「動的リンク + モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build11R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" > %~dp0wxWidgets_MinGW_64_Build11D.log 2>&1

pause

wxWidgets_MinGW_64_Clean.bat

::各種パス設定。先頭「CODEBLOCKS」にルートを設定することで全体の位置を制御可能。
SET CODEBLOCKS=C:\CodeBlocks
SET MINGW=%CODEBLOCKS%\Compilers\MinGW\64
SET WXWIDGETS=%CODEBLOCKS%\Libraries\wxWidgets
SET PATH=%MINGW%\bin
cd /d "%WXWIDGETS%\build\msw"

::以下Cleanコマンド群。
::CleanコマンドはBuildコマンドの末尾に「clean」をつけるだけ。
::「-j4」は並行処理数の指定でCPUのコア数に応じて設定。
::末尾の「2>&1」は標準出力と標準エラーを同一のファイルにリダイレクトするためのコマンド。
::「%~dp0」は実行しているBATファイルのパス。

::「静的リンク + 非モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean00R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean00D.log 2>&1

::「静的リンク + モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean01R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean01D.log 2>&1

::「動的リンク + 非モノリシック」。
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean10R.log 2>&1
mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=0 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean10D.log 2>&1

::「動的リンク + モノリシック」。
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=release CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean11R.log 2>&1
::mingw32-make -j4 -f makefile.gcc USE_QA=1 SHARED=1 MONOLITHIC=1 UNICODE=1 BUILD=debug CFLAGS+="-O3" CXXFLAGS+="-O3 -fno-keep-inline-dllexport" clean > %~dp0wxWidgets_MinGW_64_Clean11D.log 2>&1

pause

wxWidgets の使い方

次回Code::Blocks のウィザードで wxWidgets のプロジェクトを作って動作確認を行います。
その他の作業については「CodeBlocks」タグから一覧可能です。

【同じタグを付けた記事の一覧】
プログラミング ポータブル C++ CodeBlocks wxWidgets

Code::Blocks を 16.01 にバージョンアップ

2016年03月16日(水)01時00分

Code::Blocks 16.01

ちょっと久しぶりに Code::Blocks のサイトを覗いて見たところ、新バージョンである 16.01 が出ていました。
Code::Blocks は「Wikipedia の該当ページ」にも書いてあるように、公式リリース版があまり出ず、今まではバージョン 13.12 で、つまり2013年12月に出たものが最新版だったのです。
ただし、開発中のソースコードから生成された「nightly builds」のサポートが充実しており、以前に書いた「Code::Blocks をポータブルに使う(セットアップ編)」では、それを実質的な最新バージョンとして使いました。
今回はその「nightly builds」でセットアップした環境を 16.01 にバージョンアップさせます。

バージョンアップ手順

「手順」と言っても、ただファイルコピーで置き換えただけで、そう大層な作業ではありません。
Code::Blocks をポータブルに使う(セットアップ編)」で構築した環境を「旧フォルダ」、16.10 版を「新フォルダ」とすると、以下のようになります。

  1. Downloads ページから「codeblocks-16.01-nosetup.zip」をダウンロードし解凍(展開)する。
  2. 旧フォルダから「AppData」「Projects」、および、その他の開発に使用するために生成したフォルダ群(「Compilers」「Libraries」等)を新フォルダへコピー。
  3. 旧フォルダから「\share\CodeBlocks\locale」フォルダを新フォルダへコピー。

以上です。
なお、Code::Blocks をポータブル起動するために必要な「CbLauncher.exe」は 16.01 で標準添付となりました。

【同じタグを付けた記事の一覧】
プログラミング C++ CodeBlocks wxWidgets

Code::Blocks をポータブルに使う(Clang 編)

2015年12月20日(日)20時05分

Clang

ここ数回にわたり、「Code::Blocks をポータブルに使う」ための環境構築を進めています(「CodeBlocks」タグから一覧可能)。
前回前々回でコンパイラとして MinGW を使えるようにしたわけですが、わざわざ「Compilers」という複数形名のフォルダを作っておきながら、中身は MinGW だけ、というのも寂しいため、もう一つ「Clang」も置くことにしました。

現状と完成図

現在までの時点で、フォルダ構成は以下のようになっています。

$(CodeBlocks) Compilers MinGW 32 MinGW 4.8.1」格納フォルダ
64 Mingw-w64 5.2.0」格納フォルダ

今回は上記に Clang の32ビットおよび64ビットのフォルダが追加され、以下のようになる予定です。

$(CodeBlocks) Compilers Clang 32 Clang(32) 3.7.0」格納フォルダ
64 Clang(64) 3.7.0」格納フォルダ
MinGW 32 MinGW 4.8.1」格納フォルダ
64 Mingw-w64 5.2.0」格納フォルダ

Clang フォルダの抽出

まずは「http://clang.llvm.org/」の Download ページから Windows 用のインストーラを入手します。
2015年12月時点での最新版は 3.7.0 ですので「LLVM-3.7.0-win32.exe」と「LLVM-3.7.0-win64.exe」をダウンロードしました。
これらはインストーラですので、ポータブルに使うためには中身を取り出す必要があるのですが、これが難しいのです。
インストーラ自体は「Universal Extractor」等の解凍ソフトで展開できる(参考「Universal Extractor でインストーラを解体する」)のですが、そのままではファイルが足りません。
普通にインストールした Clang フォルダと比較すると、例えば一番重要な「clang.exe」や「clang++.exe」が見つかりません。
これらは「msbuild-bin」フォルダに生成される「cl.exe」と同じものであり、インストール時にリネームコピーされているようです。
他にもそういうリネームコピーされるファイルがいくつかあり、さらには同一ファイルが見当たらない新規ファイルまであります。
つまり、インストール時に何かしらのファイル生成処理もなされているようです。
というようなことから、これは素直に普通にインストールし、インストーラが生成したフォルダをコピーするのがいいと思われます。
Visual C++ がインストールされていると、その設定を書き換えたりまするようなので、自分は仮想環境にインストールして抽出しました。

Code::Blocks のコンパイラー設定(32)

Code::Blocks を「CbLauncher.exe」で起動し、メニューの「設定 → コンパイラー(C)」でコンパイラー設定ダイアログを呼び出し、「LLVM Clang Compiler」を「コピー」して「LLVM Clang Compiler 32」を作ります。
次に「ツールチェイン実行ファイル」タブの「コンパイラーのインストールディレクトリー」を「$(CodeBlocks)\Compilers\Clang\32」に書き換えます。

コンパイラーのインストールディレクトリー

また、その下にある「追加のパス」タブに「$(CodeBlocks)\Compilers\MinGW\32\bin」を「追加」しておきます。

追加のパス

さらに、「ディレクトリーの検索」タブの「コンパイラー」タブに以下の項目を「追加」します。

  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1\include\c++
  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1\include\c++\mingw32
  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1\include\c++\backward
  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1\include
  • $(CodeBlocks)\compilers\mingw\32\include
  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1\include-fixed

コンパイラー

同じく「リンカ」タブに以下の項目を「追加」します。

  • $(CodeBlocks)\compilers\mingw\32\lib\gcc\mingw32\4.8.1
  • $(CodeBlocks)\compilers\mingw\32\lib\gcc
  • $(CodeBlocks)\compilers\mingw\32\mingw32\lib
  • $(CodeBlocks)\compilers\mingw\32\lib

リンカ

Code::Blocks のコンパイラー設定(64)

前半は32ビット版と同じで、ただ文字列中の「32」を「64」に置き換えるだけです。
後半で「ディレクトリーの検索」タブの「コンパイラー」タブに「追加」する項目が以下のように変更になります。

  • $(CodeBlocks)\Compilers\MinGW\64\lib\gcc\x86_64-w64-mingw32\5.2.0\include
  • $(CodeBlocks)\Compilers\MinGW\64\lib\gcc\x86_64-w64-mingw32\5.2.0\include-fixed
  • $(CodeBlocks)\Compilers\MinGW\64\x86_64-w64-mingw32\include
  • $(CodeBlocks)\Compilers\MinGW\64\x86_64-w64-mingw32\include\c++
  • $(CodeBlocks)\Compilers\MinGW\64\x86_64-w64-mingw32\include\c++\x86_64-w64-mingw32
  • $(CodeBlocks)\Compilers\MinGW\64\x86_64-w64-mingw32\include\c++\backward

また、「リンカ」タブに「追加」する項目も以下に変更になります。

  • $(CodeBlocks)\Compilers\MinGW\64\lib\gcc\x86_64-w64-mingw32\5.2.0
  • $(CodeBlocks)\Compilers\MinGW\64\lib\gcc
  • $(CodeBlocks)\Compilers\MinGW\64\x86_64-w64-mingw32\lib
  • $(CodeBlocks)\Compilers\MinGW\64\lib

Hello world!

動作確認の「Hello world!」やスタティック(静的)リンクにする方法は、以前に書いた「Code::Blocks をポータブルに使う(MinGW32 編)」の該当部分とほぼ同じです。

追加するパスの確認方法

上記で設定した「ディレクトリーの検索」タブの各項目は、今回使用した MinGW のバージョンに対応するものです。
つまり MinGW のバージョンが違えば設定する内容も変わります。
これらは MinGW(GCC)がソースコードをビルドする際に参照する各種のパスですから、GCC に「-v」オプション(詳細表示)を付けて、何か適当なソースコードをビルドさせれば、表示されるメッセージから取得することができます。
例えば「gcc -v test.c 2> test.txt」とすれば、生成された「test.txt」中の「#include <...> search starts here:」以下に、C ソースコードをビルドする際に必要なインクルードパスが確認可能です。
これは Clang をコマンドライン等から使用する際に、環境変数「C_INCLUDE_PATH」にセットすべき内容でもあります。
C++ ソースコードをビルドする際に必要なパス「CPLUS_INCLUDE_PATH」は「gcc -v test.cpp 2> test.txt」で取得します。
これにはおそらく「C_INCLUDE_PATH」も含まれていますので、たんに Code::Blocks に設定すべき内容が欲しいだけならこちらを確認するだけで十分なはずです。
また、「リンカ」タブに設定すべき内容は、C/C++ どちらのビルドメッセージからでも「LIBRARY_PATH」行以下に記載されています。
これはもちろん、Clang をコマンドライン等から使用する際に環境変数「LIBRARY_PATH」にセットするパス群です。

「threads-posix」と「-pthread」オプション

前回「Code::Blocks をポータブルに使う(MinGW64 編)」で、Mingw-w64 では「threads-win32」か「threads-posix」かを選択する必要があることを書きました。
もしここで「threads-posix」を選んでいた場合、64ビット版 Clang では「リンカ設定 → その他のリンカーオプション」で「-pthread」を指定しないとリンクエラーでビルドできません。
もちろんこのオプションをつけて生成した実行ファイルでは「コンピューターに libwinpthread-1.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」が出ますので、その対策も必要です(前回参照)。

libwinpthread-1.dll エラー

wxWidgets

ということで、次回はやっと本来の目的である wxWidgets の準備に取り掛かろうと思います。
その他の作業については「CodeBlocks」タグから一覧可能です。

【同じタグを付けた記事の一覧】
プログラミング ポータブル C++ CodeBlocks LLVM UniversalExtractor wxWidgets

Code::Blocks をポータブルに使う(MinGW64 編)

2015年11月23日(月)23時23分

Mingw-w64

前回「Code::Blocks をポータブルに使う(MinGW32 編)」の続きで、今回は MinGW の64ビット版を導入します。
その他の作業については「CodeBlocks」タグから一覧可能です。

「SEH」か「SJLJ」か

64ビット版では、まず最初に使用するスレッディングモデルを選ぶことになります。
選択肢は「SEH か SJLJ か」と「threads-win32 か threads-posix か」の組み合わせで、計4種類です。
このうち「SEH か SJLJ か」については、「SEH」の方が実行速度が速いということで、特に理由がない限りは「SEH」でよさそうです。

「threads-win32」か「threads-posix」か

問題は「threads-win32」か「threads-posix」かで、「threads-posix」は「C++11」のスレッド機能が使えるようになっているため移植性が高いのですが、ネイティブ実装である「threads-win32」に比べて速度に劣ります。
つまり、速度重視なら「threads-win32」、クロスプラットフォーム重視なら「threads-posix」、と言うことです。
しかし、「threads-posix」で生成されたバイナリは、実行時に「コンピューターに libwinpthread-1.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」が出ます。

libwinpthread-1.dll エラー

これを回避するには「libwinpthread-1.dll」を添付するか、それをスタティック(静的)リンクにする必要があるのですが、後者の場合は Windows 専用の処理が必要になるらしいのです(http://www.up-cat.net/%BA%A3%B9%B9MinGW+2009.06%283%29+MinGW.html)。
結果として、せっかくの移植性という魅力は半減しますし、そもそも今回は wxWidgets を使うための環境構築であり、wxWidgets には「wxThread」なるクロスプラットフォームなマルチスレッド用の仕組みがあるようなので、必要ならこれを使うという手も考えられます。
ということで、今回は「threads-win32」を選択することとしました。
まあ、どうしても「threads-posix」が必要ということになっても、フォルダを丸ごと差し替えるだけで変更可能であるため、それほど悩むようなことでもないのですが。

ダウンロード

方針が決まったところで「http://sourceforge.net/projects/mingw-w64/」へ行き、必要ファイルをダウンロードします。
Mingw-w64 の2015年11月時点での最新版は「5.2.0」のようです。
ということで、上部メニューの「Files」から「Home → Toolchains targetting Win64 → Personal Builds → mingw-builds → 5.2.0 → threads-win32 → seh」と辿り、「x86_64-5.2.0-release-win32-seh-rt_v4-rev0.7z」をダウンロードしました。
これを解凍(展開)し、「D:\CodeBlocks\Compilers\MinGW\64」に置きます(前回までで作った Code::Blocks フォルダが「D:\CodeBlocks\」である場合)。

Code::Blocks のコンパイラー設定

Code::Blocks を「CbLauncher.exe」で起動し、メニューの「設定 → コンパイラー(C)」でコンパイラー設定ダイアログを呼び出し、「GNU GCC Compiler」を「コピー」して「GNU GCC Compiler 64」を作ります。
次に「ツールチェイン実行ファイル」タブの「コンパイラーのインストールディレクトリー」を「$(CodeBlocks)\Compilers\MinGW\64」に書き換えます。

コンパイラー設定(コンパイラーのインストールディレクトリー)

最後にその下の「プログラムファイル」の各項目を以下のように書き換えて「OK」すると導入完了です。

  • Cコンパイラー:gcc.exe
  • C++コンパイラー:g++.exe
  • ダイナミックライブラリーのリンカー:g++.exe
  • スタティックライブラリーのリンカー:ar.exe

コンパイラー設定(プログラムファイル)

その他

その後、動作確認の「Hello world!」やスタティック(静的)リンクにする方法は、前回「Code::Blocks をポータブルに使う(MinGW32 編)」と同じです(「32」を「64」に読み替え)。
次回はいよいよ wxWidgets の導入、のつもりでしたが、せっかくなのでその前に Clang も使えるようにします。
その他の作業については「CodeBlocks」タグから一覧可能です。

【同じタグを付けた記事の一覧】
プログラミング ポータブル C++ CodeBlocks wxWidgets

スポンサーサイト

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(65)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(34)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(26)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(17)
画像管理(15)
WindowsLiveWriter(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
ウォークマン(9)
fi-6130(9)
FLAC(9)
Gracenote(8)
英語音読学習計画(8)
Prolog(8)
JavaScript(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
wxWidgets(7)
spcbght(7)
DCP-J552N(6)
W63CA(6)
MP3Gain(6)
WinRT(6)
iGoinLM(6)
VirtualBox(6)
WindowsLiveMesh(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
楽器演奏(5)
Mery(5)
LAME(5)
音楽技術(5)
GalateaProject(4)
LLVM(4)
nLite(4)
MIDI(4)
ホームページ(4)
WindowsLiveSkyDrive(4)
GalateaTalk(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
112位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
11位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。