MacOSのEclipseでwxWidgetsを使う

環境

  • Mac OS Sierra
  • Eclipse Oxygen (4.7.0)
  • wxWidget 3 (osx_cocoa-unicode-3.0)

準備

brewでinstallしとくもの

  • wxmac

たぶん必要なもの

  • tiff
  • jpeg
  • png
  • xz

もっとあると思うので適宜インストールする。

シェルの設定

シェルの設定ファイルにパスを通す必要があります。

export CFLAGS="$CFLAGS -I/usr/local/Cellar/xz/<version>/include"
export CFLAGS="$CFLAGS -I/usr/local/Cellar/jpeg/8d/include"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="$LDFLAGS -L/usr/local/Cellar/xz/<version>/lib"
export LDFLAGS="$LDFLAGS -L/usr/local/Cellar/jpeg/8d/lib"

パスはバージョンに合わせて適宜書き換えてください。

Eclipseの設定

プラグインの導入

C/C++プロジェクトの作成に必要なプラグインをインストールします。

eclipse_plugin_install01.png

[ヘルプ]→[新規ソフトウェアのインストール]でインストール画面を開きます。
作業対象セレクターをCDTへのURLに切り替えます。
CDTのURLがない場合は、適宜追加してください。

「CDTメイン・フィーチャー」から「C++開発ツール」をインストールします。
インストール後に再起動したら、新しいC++プロジェクトを作っていきます。

今回のプロジェクト名は「HelloWorld」とします。

プロジェクトの設定

C++プロジェクトを作成したら、プロパティから設定を変えていきます。

eclipse_Propertie01.png

プロジェクト名の上で右クリックすると、表示されるメニュー下部に
プロパティがあると思うので、クリックで開き、設定を書き換えていきます。
構成は「Debug」から「Release」にしておきます。

C/C++ ビルドの設定

右メニューの「C/C++ビルド」を展開して、「設定」項目を表示させます。

eclipse_Propertie02.jpg

ツール設定の設定

「ツール設定」タブの設定から行っていきます。
ここのタブでは4箇所ほど変更を加えます。

「MacOS X C++ Linker」→「高度な設定」の「コマンド行パターン」にある
${OUTPUT}の先頭に${BuildArtifactFileName}.app/Contents/MacOS/を追記します。
下記のような感じになるかと思います。

${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${BuildArtifactFileName}.app/Contents/MacOS/${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

「MacOS X C++ Linker」→「その他」の「リンカー・フラグ」に下記を設定します。

`/usr/local/bin/wx-config --libs`

「GCC C++ Compiler」→「インクルード」の「インクルード・パス(-I)」に
先ほどビルドした「wxWidgets/build-release/lib/wx/include」への
フルパスを設定します。

「GCC C++ Compiler」→「その他」の「その他のフラグ」に下記を設定します。

`/usr/local/bin/wx-config --cppflags`

ビルド・ステップの設定

次は「ビルド・ステップ」タブの設定です。

eclipse_Propertie03.png

「ビルド前のステップ」のコマンドに、下記コマンドを設定してください。

mkdir -p ${BuildArtifactFileName}.app/Contents/MacOS;mv ${BuildArtifactFileName} ${BuildArtifactFileName}.app/Contents/MacOS/

Hello Worldの出力

新規ソース・ファイルを作成し、
下記のソースコードを入力してビルドしてみましょう。

#include <wx/wx.h>

class MyApp: public wxApp
{
public:
    virtual bool OnInit();
};
class MyFrame: public wxFrame
{
public:
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
    wxDECLARE_EVENT_TABLE();
};
enum
{
    ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(ID_Hello,   MyFrame::OnHello)
    EVT_MENU(wxID_EXIT,  MyFrame::OnExit)
    EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );
    frame->Show( true );
    return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
        : wxFrame(NULL, wxID_ANY, title, pos, size)
{
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, "&File" );
    menuBar->Append( menuHelp, "&Help" );
    SetMenuBar( menuBar );
    CreateStatusBar();
    SetStatusText( "Welcome to wxWidgets!" );
}
void MyFrame::OnExit(wxCommandEvent& event)
{
    Close( true );
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
    wxMessageBox( "This is a wxWidgets' Hello world sample",
                  "About Hello World", wxOK | wxICON_INFORMATION );
}
void MyFrame::OnHello(wxCommandEvent& event)
{
    wxLogMessage("Hello world from wxWidgets!");
}

ビルドが成功したら、Releaseフォルダの中に、
<ファイル名>.appというファイルが作成されているかと思います。

wxwidgets_helloworld.png

起動してみるとHello Worldと書かれたウィンドウが表示されるかと思います。
あとは色々試してみてください。

Unresolved inclusionエラーの対策

このままではコンテンツ・アシストが使えないので、
インクルードパスを通します。

プロパティから「C/C++ 一般」→「パスおよびシンボル」の
「インクルード」タブを開きます。

wx-config --cppflags

上記コマンドで表示されるincludeディレクトリまでのパスを追加します。

  • すべての構成に追加
  • すべての言語に追加

上記2つにチェックをいれておいてください。

eclipse_Propertie05.png

参考