2026年09月10日

Ubuntu での開発環境:VSCode + wxWidgets

 Ubuntu でもアプリの開発環境を立ち上げてみました。IDE としては、無難なところで VSCode を選びました。Mac でも Python とか Javascript 開発で一応使った経験はあります。Linux だからといって emacs や vim を使うほどの超ガチ勢ではないので、まあこんなところでしょう。

Visual Studio Code - The open source AI code editor | Your home for multi-agent development

 VSCode は公式サイトから deb ファイルをダウンロードしてきてインストールします。Discover で探すと snap 版が見つかるのですが、これには「日本語が入力できない」という致命的な欠点があります。

【Ubuntu22.04】VSCodeで日本語が入力できない場合の対処法 - Qiita

日本語でコメントを書きたい 私は Visual Studio Code でC++やPythonを書いています。 OSをUbuntu20.04から22.04にアップデートしたところ、日本語入力ができなくなったのでメモ。 ちなみにブラウザの検索窓など、VSCode以外ではちゃ...

 とりあえずやってみたいこととして、wxWidgets/C++ でアプリが書けるようにします。Linux でアプリ開発をするといっても、今から GTK や Qt をイチから覚えるのはちょっとキツい。また、一時 wxLua やら wxPython にも手を出したのですが、使い捨てのツールならともかく、公開して他人でも使えるモノにしようとすると、いろいろ問題が出てきます。最終的には、ネイティブバイナリにコンパイルできるのが最強です。その点では、一番確実なのは wxWidgets のネイティブ言語である C++ ですね。

 VSCode がまだよくわかってないので、いろいろ試行錯誤しました。今のところ、こんな環境に落ち着きつつあります。

1. VSCode の機能拡張として、C/C++ Extension, CMake Tools をインストールする。

 C/C++ Extension は当然でしょう。この機会に make から cmake に移行しようと思っているので、CMake Tools を入れました。

2. Linux の開発環境を整える。

$ sudo apt install build-essential cmake git libwebkit2gtk-4.1-dev

 最後の libwebkit2gtk-4.1-dev は、wxWebView を使うのに必要です。Linux における libwebkit2gtk の互換性問題はなかなかややこしいことになっていますが、その話はまたの機会に。

3. wxWidgets を自前でビルドして、静的ライブラリを作っておく。

 アプリ開発のプロジェクトディレクトリは $HOME/Development/wxMyProjects/{プロジェクト名} と決めておきます。リンクする wxWidgets のバージョンを確実に特定するため、自前でビルドして、$HOME/Development/wxMyProjects/extlibs 以下にインストールしておきます。

$ curl -L https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.11/wxWidgets-3.2.11.tar.bz2 >wxWidgets-3.2.11.tar.bz2
$ tar xfj wxWidgets-3.2.11.tar.bz2
$ cd wxWidgets-3.2.11
$ mkdir build-linux-temp; cd build-linux-temp
$ ../configure --disable-shared --with-opengl --enable-monolithic --disable-sys-libs --prefix=$HOME/Development/wxMyProjects/extlibs 2>&1 | tee configure.log
$ make -j 4 2>&1 | tee make.log
$ make install 2>&1 | tee install.log
$ make distclean

4. プロジェクトフォルダのルートに CMakePresets.json を作成する

 せっかく wxWidgets で書くんだったら、同じプロジェクトで Linux, Mac, Windows のどれでもビルドできるようにしたいところです。使うコンパイラの種類(Linux は g++, Mac は clang++)、デバッグ/リリースビルドの区別、作業用ディレクトリの場所などを決めておくため、CMakePresets.json を使ってプリセットを定義します。(とりあえず Linux と Mac 用です。Windows は後で考えます)

{
  "version": 3,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 20,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "linux-base",
      "hidden": true,
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/${presetName}"
    },
    {
      "name": "linux-gxx-debug",
      "inherits": "linux-base",
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Linux"
      },
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "CMAKE_C_COMPILER": "gcc",
        "CMAKE_CXX_COMPILER": "g++"
      }
    },
    {
      "name": "linux-gxx-release",
      "inherits": "linux-base",
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Linux"
      },
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "CMAKE_C_COMPILER": "gcc",
        "CMAKE_CXX_COMPILER": "g++"
      }
    },
    {
      "name": "macos-base",
      "hidden": true,
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/${presetName}",
      "cacheVariables": {
        "CMAKE_C_COMPILER": "clang",
        "CMAKE_CXX_COMPILER": "clang++"
      }
    },
    {
      "name": "macos-debug",
      "inherits": "macos-base",
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Darwin"
      },
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    },
    {
      "name": "macos-release",
      "inherits": "macos-base",
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Darwin"
      },
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "build-linux-debug",
      "configurePreset": "linux-gxx-debug"
    },
    {
      "name": "build-linux-release",
      "configurePreset": "linux-gxx-release"
    },
    {
      "name": "build-macos-debug",
      "configurePreset": "macos-debug"
    },
    {
      "name": "build-macos-release",
      "configurePreset": "macos-release"
    }
  ]
}

5. CMakeLists.txt を作る。

 まだよくわかってないんですが、あちこち調べたり Google Gemini に教えてもらったりしながら、ここまでたどり着きました。

cmake_minimum_required(VERSION 3.20)  #  使うcmakeのバージョン
project(firstapp)                     #  プロジェクトの名前
set(EXTLIBS "$ENV{HOME}/Development/wxMyProjects/extlibs")   #  extlibs のパス
                                      #  他の依存ライブラリも同じ場所に置く予定
set(wxWidgets_CONFIG_EXECUTABLE "${EXTLIBS}/bin/wx-config")  #  FindwxWidgets のために wx-config の位置を指定
find_package(wxWidgets REQUIRED COMPONENTS core base)  #  wxWidgets を見つける
include(UsewxWidgets)                          #  wxWidgets を使うのに必要なフラグを設定
set(SOURCES MyApp.cpp)                         #  ソースファイルを列挙(ここでは1つだけ)
if(APPLE)
add_executable(FirstApp MACOSX_BUNDLE ${SOURCES})  #  Mac のアプリケーションバンドルの作成を指示
else()
add_executable(FirstApp ${SOURCES})            #  実行ファイルの作成を指示
endif()
target_compile_features(FirstApp PUBLIC cxx_std_17)  #  コンパイルフラグ
target_link_libraries(FirstApp PRIVATE ${wxWidgets_LIBRARIES})  #  wxWidgets のライブラリを追加
set_target_properties(FirstApp PROPERTIES OUTPUT_NAME "MyApplication")   #  実行ファイルの名称を指定

6. MyApp.cpp を作る。

 例えば下のようなものです。

#include <wx/wx.h>

class MyApp : public wxApp {
public:
    virtual bool OnInit();
};

class MyFrame : public wxFrame {
public:
    MyFrame(const wxString& title);
};

bool MyApp::OnInit() {
    MyFrame *frame = new MyFrame(_T("最小のwxWidgetsアプリ"));
    frame->Show(true);
    return true;
}

MyFrame::MyFrame(const wxString& title)
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(400, 300)) {
}

wxIMPLEMENT_APP(MyApp);

7. VSCode で開く。

 上記の3つのファイルを含んだディレクトリを VSCode で開きます。最初に、一番上の行に "Restricted Mode is intended for safe code browsing."という表示が出ます。このままだと読み出しのみで変更ができないため、Manage を押して、"Trust" を指示します。

20260910-1.png

 すると、「構成の事前設定を選択してください (Select a configure preset)」というメニューが出て、CMakePresets.json の "configurePresets" に書いたプリセットを選ぶように促されます。最初は debug を選びます。

20260910-2.png

 このメニューは、VSCode から別のアプリに移ると消えてしまいます。そのときは、VSCode の左のカラムにある CMake Tools のアイコンを選び、「構成」(Configuration) のリストを開いて、右端のえんぴつマークを押すと、同じメニューが現れます。

20260910-3.png

 Configuration を選ぶと、CMakeLists.txt がチェックされます。ここでエラーが出た場合は、何か問題があると思われるので、頑張って解決します。エラーがなくなったら、画面一番下の「Build」を押すとビルドが始まります。ここもきっとエラーが出るので、頑張って解決します。エラーがなくなったら、虫のアイコンを押すと、デバッガ (gdb) 上での実行が始まります。

20260910-4.png

 ここから先は、Xcode などでの開発と同じなので、特筆すべきことはありません。CMakeLists.txt の書き方を頑張って覚えなくちゃな、というところです。

20260910-5.png
タグ:Linux wxWidgets
Posted at 2026年09月10日 22:56:25
email.png