WSL2 + Docker + MinGWで、自動でhello worldをWindows用にクロスコンパイルする方法


3行で説明

面倒なクロスコンパイル、なんとかしたいですよね。
そこでscriptを書きました。コマンドプロンプトに貼ってENTERで3分放置すればクロスコンパイル完了です。

curl.exe -L https://raw.githubusercontent.com/cat2151/wsl2-docker-mingw-hello/main/WSL2_docker_mingw_hello.bat --output WSL2_docker_mingw_hello.bat && WSL2_docker_mingw_hello.bat

この記事の対象読者

以下に興味のある方。何かの参考になれば幸いです。

  • WSL2, Docker, Docker Hub, MinGW
  • C/C++ソースコードをクロスコンパイルしてWindows用exeを作成
  • Windowsでgcc
  • Dockerなので環境を汚さないし、高速にビルド(10秒)
  • GitHubからcurlしたscriptで非対話的にビルドを実行

このscriptは何を実現するの?

  • 以下を自動化します :

    • docker-mingw-w64 を Docker Hubから得る
      • これはgcc系のC/C++ソースからWindows用exeをビルドできる仕組みです
    • docker-mingw-w64 用の build.sh を得る
      • ユーザーが任意に作れる build.sh の参考用に、hello worldを提供します
    • hello worldをクロスコンパイルする
      • これはWindowsで動作するexeです
        • Dockerで動くUbuntu上でmingwによりクロスコンパイルされて出力されます
    • hello worldをWindows上で実行し、結果を得る
    • 上記すべてのログを出力する
  • 環境を汚さないため、手軽に扱えます。

  • コマンドプロンプトから1行のコマンドを実行するだけで自動ですべてが完了します。面倒な操作は不要です。

docker-mingw-w64とは?

Linuxコンテナ上でクロスコンパイルしてWindows用exeを作る仕組みです。

GitHub docker-mingw-w64
Docker Hub mingw-w64

Windowsで動かすには、コマンドのpwd部分を書き換える必要があります:

  • PowerShell用
docker run --rm -ti -v "$($pwd.Path):/mnt" mmozeiko/mingw-w64 ./build.sh
  • bat用
docker run --rm -ti -v %CD%:/mnt mmozeiko/mingw-w64 ./build.sh
  • MSYS2/Cygwin用
docker run --rm -ti -v $(cygpath -w $(pwd)):/mnt mmozeiko/mingw-w64 ./build.sh

さらに詳しく

GitHubをご参照ください :
WSL2 docker mingw hello

関連記事

MSYS2のダウンロードとインストールを自動で行う方法
Cygwinのダウンロードとインストールを自動で行う方法