macOS 上に Linux C/C++ 開発環境を 10 分で素早く構築

Epoll を使用した C プロジェクトがあるが、普段メインで使用している Linux 開発マシンが手元にないので、macOS で開発とデバッグをしたいのですが、Linux 仮想マシンがありません。たまたま、JetBrains CLion のツールチェーン構成は、ローカル環境の使用に加えて SSH と Docker をサポートしています。

CLion + Docker Desktop を使用すると、筆者は 10 分以内に Linux クラス ライブラリを使用した C プロジェクトを開発できる開発環境を macOS 上に構築でき、開発経験も豊富です。

Docker環境を準備する

macOS の場合は、Docker Desktop を使用できますが、この記事では説明しません。
もちろん、Docker 環境はローカルではない可能性があり、TCP または SSH を介して非ローカルの Docker 環境に接続できます。

ここに画像の説明を挿入

プロジェクトに必要な依存関係を含むイメージをビルドする

Dockerfileを準備し、必要な依存関係をインストールする

著者のメイン開発マシンは Ubuntu 22.04 で、ベース イメージと同じシステムを選択しています。
ミラーリングは、プロジェクトで必要な依存関係に応じて構築できます。以下は、基本的な C/C++ 環境を構築するための Dockerfile です。

FROM ubuntu:22.04
MAINTAINER [email protected]
RUN apt update && apt install -y cmake g++ gdb

ヒント: Ubuntu 公式 apt ソースへのアクセスを高速化できない環境の場合は、国内の apt ソースを使用することをお勧めします。

基本イメージ内の元のsources.listをsources.listで上書きします。

FROM ubuntu:22.04
MAINTAINER [email protected]
ARG TARGETARCH
COPY $TARGETARCH/sources.list /etc/apt/sources.list
RUN apt update && apt install -y cmake g++ gdb

x86/64 アーキテクチャを構築する環境では、以下のソースリストを使用できます。

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

aarch64 およびその他のアーキテクチャを構築するための環境では、次のソースリストを使用できます。

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse

ビルドイメージ

>>> docker build -t teslacn/cmake:1.0 .
[+] Building 16.4s (8/8) FINISHED                                            
 => [internal] load build definition from Dockerfile                    0.0s
 => => transferring dockerfile: 37B                                     0.0s
 => [internal] load .dockerignore                                       0.0s
 => => transferring context: 2B                                         0.0s
 => [internal] load metadata for docker.io/library/ubuntu:22.04        16.3s
 => [1/3] FROM docker.io/library/ubuntu:22.04@sha256:f154feaf13b51d16e  0.0s
 => [internal] load build context                                       0.0s
 => => transferring context: 65B                                        0.0s
 => CACHED [2/3] COPY arm64/sources.list /etc/apt/sources.list          0.0s
 => CACHED [3/3] RUN apt update && apt install -y cmake g++ gdb         0.0s
 => exporting to image                                                  0.0s
 => => exporting layers                                                 0.0s
 => => writing image sha256:b4ad8d6c3284e79dedcf8c628b1a89c0bb59d29000  0.0s
 => => naming to docker.io/teslacn/cmake:1.0                            0.0s

CLion ツールチェーンの構成

ツールチェーンにより Docker 環境が追加される

ビルドされたイメージを選択するだけで、CLion がビルド ツール、コンパイラー、GDB のバージョンを自動的に検出します。
ここに画像の説明を挿入

CMake プロジェクトは、追加したばかりの Docker ツールチェーンを選択します

ここに画像の説明を挿入

開発経験

ヘッダーファイルのナビゲーション

CLion は、Linux ヘッダー ファイルをローカルのコンテナーに自動的にキャッシュし、sys/epoll.hコードからファイルに直接移動できます。これは、Linux 環境で直接開発する場合と変わりません。
ここに画像の説明を挿入

直接実行する

普通にローカルで実行するのと全く違いはありません。
ここに画像の説明を挿入

試運転

デバッグして実行してみると、プログラムログが標準出力に出力されないことを除けば、その他のデバッグ機能はローカルデバッグと全く同じであることがわかりました。

ここに画像の説明を挿入

ここに画像の説明を挿入

以上が環境構築の過程と結果です。

[更新] CLion デバッグ コンソールにログがありません

解決:

setbuf(stdout, 0);

https://stackoverflow.com/questions/47776094/clion-wont-show-output-in-debug

おすすめ

転載: blog.csdn.net/wu_weijie/article/details/130142115