私はcrossbuild * をいじっていましたが、ヒア ドキュメントを使用してコマンドを Docker コンテナーにパイプする方法について疑問に思っていました。これが解決策です。
$ docker run --rm --interactive --volume $(pwd):/workdir --env CROSS_TRIPLE=x86_64-apple-darwin multiarch/crossbuild /bin/bash -s <<EOF
mkdir build && cd build
cmake ..
make
EOF
何が起こっているかの簡単な要約。
--rm
実行が終了したときにコンテナーを削除するように Docker に指示します。そうしないと、出力に表示されますdocker ps -a
(もちろん、必須ではありません)。
--interactive
が-i
必要です。そう/bin/bash
しないと、インタラクティブな環境で実行されず、stdin からのヒア ドキュメントを入力として受け入れません。
-s
渡されるフラグについて/bin/bash
-s オプションが存在する場合、またはオプション処理後に引数が残っていない場合、コマンドは標準入力から読み取られます。
--volume $(pwd):/workdir
-v
、ホストの現在の作業ディレクトリを/workdir
コンテナにマウントするだけです
--env CROSS_TRIPLE=x86_64-apple-darwin
、または単純に、ターゲット プラットフォームとアーキテクチャ-e
についてcrossbuild
コンテナーに通知します (コンテナーのエントリ ポイントは/usr/bin/crossbuild
、シェル スクリプトであり、環境変数に基づいて、適切なツールチェーン コンポーネントを適切な場所にシンボリック リンクし、クロス コンパイルが機能するようにします)。
multiarch/crossbuild
実行する Docker コンテナーの名前 (Docker Hub で利用可能)
コマンドは、このように Docker にフィードすることもできます。
$ cat a.sh
mkdir build && cd build
cmake ..
make
$ docker run --rm -i -v $(pwd):/workdir -e CROSS_TRIPLE=x86_64-apple-darwin multiarch/crossbuild /bin/bash -s < a.sh
これが役立つことを願っています。
アップデート
実際には、使用する必要さえないようです。/bin/bash -s
少なくともcrossbuild
コンテナー YMMV については省略できます。
*マルチアーキテクチャ バイナリの生成に使用される Linux ベースのコンテナ: Linux、Windows、OS X、非常にクール。