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.
Directorio de artículos
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.
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.
El proyecto CMake selecciona la cadena de herramientas Docker recién agregada
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.h
los archivos desde el código, lo que no es diferente del desarrollo directo en el entorno de Linux.
ejecutar directamente
No hay ninguna diferencia en absoluto en comparación con la ejecución local normalmente.
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.
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