Cree rápidamente un entorno de desarrollo Linux C/C++ en macOS en diez minutos

Hay un proyecto C que usa Epoll. La principal máquina de desarrollo de Linux que suelo usar no está conmigo. Quiero desarrollar y depurar en macOS, pero no hay una máquina virtual de Linux. Da la casualidad de que la configuración de Toolchains de JetBrains CLion admite SSH y Docker además de usar el entorno local.

Con CLion + Docker Desktop, el autor puede crear un entorno de desarrollo en macOS que puede desarrollar proyectos C utilizando bibliotecas de clases de Linux en menos de diez minutos y tiene una buena experiencia de desarrollo.

Preparar el entorno de Docker

Para macOS, puede usar Docker Desktop, que no se describirá en este artículo.
Por supuesto, el entorno de Docker puede no ser local y puede conectarse al entorno de Docker no local a través de TCP o SSH.

inserte la descripción de la imagen aquí

Cree una imagen que contenga las dependencias requeridas por el proyecto

Prepare Dockerfile e instale las dependencias requeridas

La máquina de desarrollo principal del autor es Ubuntu 22.04 y elijo el mismo sistema que la imagen base.
La duplicación se puede construir de acuerdo con las dependencias requeridas por el proyecto. El siguiente es el Dockerfile para crear un entorno básico de C/C++.

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

Sugerencia: si el entorno no puede acelerar el acceso a la fuente apt oficial de Ubuntu, se recomienda utilizar la fuente apt doméstica.

Sobrescriba el source.list original en la imagen base con source.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

El entorno para construir arquitectura x86/64 puede usar las siguientes fuentes.lista

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

El entorno para construir aarch64 y otras arquitecturas puede usar las siguientes fuentes.lista

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

construir imagen

>>> 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

Cadenas de herramientas de configuración de CLion

Las cadenas de herramientas agregan un entorno Docker

Simplemente seleccione la imagen compilada y CLion detectará automáticamente la versión de la herramienta de compilación, el compilador y GDB.
inserte la descripción de la imagen aquí

El proyecto CMake selecciona la cadena de herramientas Docker recién agregada

inserte la descripción de la imagen aquí

experiencia de desarrollo

navegación del archivo de encabezado

CLion almacena en caché automáticamente los archivos de encabezado de Linux en el contenedor localmente y puede navegar directamente a sys/epoll.hlos archivos desde el código, lo que no es diferente del desarrollo directo en el entorno de Linux.
inserte la descripción de la imagen aquí

ejecutar directamente

No hay ninguna diferencia en absoluto en comparación con la ejecución local normalmente.
inserte la descripción de la imagen aquí

Puesta en marcha

La depuración y ejecución encontró que, excepto que el registro del programa no se envía a la salida estándar, otras funciones de depuración son completamente iguales a la depuración local.

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Lo anterior es el proceso y resultado de la construcción del entorno.

[Actualización] La consola de depuración de CLion no tiene registros

Solución:

setbuf(stdout, 0);

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

Supongo que te gusta

Origin blog.csdn.net/wu_weijie/article/details/130142115
Recomendado
Clasificación