2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-21

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のダウンロードとインストールを自動で行う方法

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?