Sunrise Manually # 2: según el hardcore para el IDE, Cmake y mi decepción por los animales

En un artículo anterior, tuve la osadía de usar CLion como IDE. Y luego vino un hombre corriendo con una pregunta: oh, una embarcación patentada, agotada, riéndose, etc. Para ser justos, solo hubo un comentario sobre Habré, pero en realidad hay miles de ellos. Por ejemplo, la última cuenta LOR activa, me he registrado desde 2010, y en casi todas las discusiones que involucran algún software propietario, comienza este infierno. Está claro que no le demostraré nada a nadie, pero puede ayudar a pases extraños.


El artículo se divide condicionalmente en dos partes: socialmente motivador y técnico (cómo construir CMake en Windows bajo varios IDE).




¿A dónde fue todo?


Este comentario del último artículo fue la base del artículo : "Si el podcast es para principiantes y no profesionales, ¿por qué no tuvo en cuenta la licencia IDE :(" y en adelante?


El artículo se basa en los resultados de una transmisión de Twitch y sus comentarios al respecto. El registro está en YouTube. Este artículo no es una transcripción de un podcast, sino un producto de comprenderlo.



Mensaje fuente


Primero, verifiquemos la validez de la suposición original: el software es costoso. Si va al sitio, resulta que CLion cuesta 8.90 dólares al mes. 580 rublos. Está claro que para una persona que no hace la programación para ganarse la vida, esto a veces puede mostrar una cantidad decente que se puede gastar en algo más útil. Compre una comida, por ejemplo.


Para un profesional, todo es completamente diferente, pero dejemos este tema. Un periodista se diferencia de un empleado en el departamento de marketing de un fabricante de software o juegos en que no promueve la política del Partido, no toma medidas para promocionar el producto. Él habla como es. Cómo es todo esto realmente, cómo ve realmente un periodista una pregunta. Lo mismo ocurre con los verdaderos evangelistas.


La esencia de los fenómenos, y la cadena de años,
Rostros de amigos y máscaras de enemigos,
Claramente visible y no se puede ocultar
De los ojos del poeta, el dueño de siglos.

La luz de estrellas distantes y el comienzo del amanecer.
Los secretos de la vida y los secretos del amor.
En un momento de inspiración, calentado por el sol ...
Todo se refleja en las almas del poeta.
En el espejo del mundo ...

(c) Konstantin Nikolsky, Espejo del mundo

Si es realmente interesante cómo CLion aumenta sus ingresos, encontrará a alguien a quien contactar y aquí estamos hablando de otra cosa.


Tipologia


En cambio, considere grupos de personas que son bombardeadas tanto como sea posible por software cerrado.


Como ya entendiste, no soy un sociólogo nifiga, y solo tengo la tipología que se desarrolló en el fragor de los enfrentamientos del foro. Solo tiene la ventaja de que es posible atribuir a una persona a un determinado grupo prácticamente sin incluir el cerebro al mirar los dos primeros comentarios.


Entonces, las personas son:


  • Freedom Fighters y Open Source
  • Sinceramente equivocado
  • Animales

Sugiero no considerar la incorrección del autor. Soy un asunto diferente .


Freedom Fighters y Open Source


Los más puros y brillantes son los luchadores para el openor. Yo mismo soy uno de los que, habiendo escuchado la palabra "Linux", corrige constantemente, "no Linux, sino GNU / Linux" . El problema es que el mundo real nunca es blanco y negro. Tenemos una cierta cantidad de libertad, y este es un recurso que se puede utilizar si es necesario. Como alguien de la gerencia de Mozilla bromeó (o no), "¿por qué necesitamos un crédito de confianza si no lo gastamos?".


Ejemplo: había una persona así, Miguel de Icaza. Hizo Gnome y participó en la construcción de un GNU / Linux desproporcionado tal como lo conocemos. Y luego fue expulsado de la comunidad, y Stallman lo llamó un "traidor a la libertad":


“Miguel de Icaza es esencialmente un traidor a la comunidad del Software Libre. <...> El proyecto tiene como objetivo organizar el funcionamiento de los programas supuestamente de "código abierto" en la plataforma Windows; así, el tiempo inestimable de los desarrolladores se gasta en plataformas gratuitas "

¿Y dónde está Miguel ahora? Él y su equipo trabajan codo a codo con uno de los mejores proyectos de los últimos años: portar .NET a GNU / Linux bajo licencias permisivas. Realmente pasó su tiempo.


En la transmisión, maté al menos veinte minutos para tropezar con CMake bajo Visual Studio Code. No funcionó. Y en el Visual Studio gratuito, pero no gratuito, resultó la primera vez. Esto es exactamente lo que a menudo obtenemos cuando tratamos de usar software libre: en el código abierto, por razones obvias, no hay tiempo para pensar en scripts de extremo a extremo y cuidar todo el producto. Gracias a los desarrolladores por haber hecho al menos algo. Pero para nosotros, como usuarios, todavía tenemos una opción moral y ética: elegir la libertad y pasar mucho tiempo pateando software libre, o, por el contrario, gastar nuestra libertad en comprar tiempo, que luego puede gastarse en algunas buenas acciones.


Dado que este problema está más allá del alcance de los problemas técnicos, terminaremos aquí. Una persona verdaderamente ideológica es fiel a su idea.


Animales


Oh, pero esta categoría me está bombardeando.


"Las características específicas de una persona que lo distinguen de otros animales son la postura erguida, un cerebro altamente desarrollado, el pensamiento y el habla articulada. Una persona estudia y cambia a sí mismo y al mundo que lo rodea, crea una cultura y su propia historia". (c) Wikipedia .

Desafortunadamente, en una conversación sobre el IDE a menudo resulta que el interlocutor no es capaz de pensar de forma independiente, en lugar de articular el habla, murmura "y yo ya tengo normas" y come lo que dan. Debido a la postura erguida, es fácil confundirlo con una persona, pero no se equivoque.


Estas criaturas montan todo para cualquiera. En los juegos, venden cajas de botín y DLC con música nostálgica. En los editores, se ponen en varias cosas analmente ocupadas, con el objetivo de vincular al paciente a un entorno específico, ecosistema y tanto que no se necesita fenazepam . Comerán de todo. "Y también lo son las normas para mí".


Es importante agregar que no solo los especialistas en marketing manejan en sus oídos, sino también los trolls o esquizáticos clínicos naturales. Hay muchos esquizos, no vas a creer cuánto.


Por ejemplo, recuerde el manifiesto que Nikitonsky publicó recientemente (más precisamente, su traducción al Habr): ¿ Mi decepción en el software ? Cómo me bombardean de él. Espero sinceramente que Nikitonsky haya escrito todo esto para tocarlo a sabiendas, y no realmente.


Mira qué tesis hay:


  • Todo es insoportablemente lento: un teléfono moderno es más poderoso que las computadoras que enviaron personas a la luna;
  • Todo es ENORME: Android pesa 6 gigabytes;
  • Todo se pudre: los dispositivos viejos no funcionan o funcionan mal;
  • En el caos de programación, mire los gráficos de dependencia en npm y left-pad.

Trolling es trolling, pero puede que a alguien no le resulte familiar que el tamaño del código fuente es "lo que trajo a la persona a la luna", es decir, Apolo 11, de modo que el autor difícilmente querría leerlos.




Que los sistemas operativos modernos definen cualquier equipo y tienen todo para cada ocasión. Que la desaceleración de los dispositivos condujo a una situación maravillosa cuando los capitalistas de Merissa se agacharon y desarrollaron hierro a un nivel moderno, gracias a lo cual tenemos en nuestro bolsillo un megadispositivo para todas las ocasiones. Incluso las toallas no son necesarias, está en Google Play. El npm mencionado permite a una persona común y corriente escribir cosas de una complejidad inimaginable que tomaría años antes.


Y luego a todos estos camaradas que están "comiendo lo que dan", de repente, las mega ideas de la lista anterior comienzan a volar en mi cabeza. Extendamos al IDE:


  • Para aplicaciones en Electron (Visual Studio Code, Atom), las letras aparecen en la pantalla muy lentamente, ya sea vim o emacs;
  • Eclipse IDE se ralentiza;
  • En general, Java se ralentiza, junto con todo lo que está escrito en él, incluidos NetBeans, IDEA y Clion;
  • Cualquier IDE ralentiza comer por ciento así como así;
  • La propiedad es malvada;
  • La lista continúa.

Esta lista ya es suficiente para revisar el techo. No le creas a la basura. Si vim es mejor que Eclipse (o viceversa) en algunos casos, definitivamente esto no se debe a que los vecinos irradian vimers con un microondas y los extraterrestres secuestran eclipsers por la noche.


Desafortunadamente, como resultado de largas guerras de guerras en red, se estableció con precisión: aquí no puede haber diálogo. Al hombre - humano, y al animal - animal. Así es como se arregla la vida. La probabilidad de que alguien lea este artículo y cambie de opinión es extremadamente pequeña, mejorada .


Sinceramente equivocado


Ahora hemos terminado con los extremos: particularmente inteligentes de la secta Stallman en un lado del espectro, y animales no muy inteligentes en el otro, hablemos de la gente común.


La primera idea errónea es que de alguna manera estamos atrapados en el IDE. Pasó desde el momento en que la gente usaba algún tipo de Delphi 7 y versiones antiguas de Microsoft Visual Studio. Dicen que en el nuevo Vizhualka todo estaba bien con los archivos del proyecto. Hola, ahora es el año 2018, no hay más esclavitud.


Para deshacernos de la esclavitud, hemos recibido CMake desde arriba: una herramienta de utilidad de código abierto multiplataforma que le permite crear, probar y empaquetar aplicaciones.


Todavía no dice nada al novato y sus brazos alcanzan el IDE. Todo esto por miedo y malentendido de lo que está sucediendo. Yo mismo vengo de Java y, por lo tanto, sé bien cómo los ojos de una persona que vio por primera vez pom.xml expanden por primera vez.


Veamos en qué consiste el proyecto creado la última vez y cómo construirlo en todo tipo de IDE diferentes.


Composición de archivo:



El sombreador se compila directamente en tiempo de ejecución, con la función D3DCompile . El D3DCompiler del DirectX SDK (que ahora es el SDK de Windows) funciona. No se necesita IDE para construirlo.


main.cpp es el único archivo para construir. Y se recopila utilizando información que está completamente en CMakeLists.txt .


En la dirección opuesta: hay CMakeLists.txt , que nos dice exactamente qué vamos a compilar. El ensamblado main.cpp registrado en él. Esto es suficiente para compilar el proyecto. Después de la compilación, se obtiene un archivo exe, que, después del lanzamiento, recoge el sombreador y lo muestra en la pantalla. Todo es extremadamente simple, el IDE no está involucrado en esta cadena y puede ser cualquier cosa.


IDE es opcional. En general ¿Qué es incomprensible aquí?


Asamblea


Momentos preparatorios


Como siempre, la preparación ocupa la mayor parte del proceso. Hay algunas cosas que deben aclararse.


Se supone que todo se hace sobre la base de Msys2, que instalamos la última vez . Si este no es el caso, tendrá que desenredarse :)


Cómo instalar CMake y Ninja


Para poder recopilar algo, debe instalar CMake, si aún no lo ha hecho.


  • Descargar desde el sitio: https://cmake.org/download . Tengo cmake-3.12.2-win64-x64;
  • Desempaquete y agregue la ruta al lugar donde se encuentra cmake.exe en la variable de entorno de Windows RUTA;
  • Descargue del sitio el generador ninja de la última versión ;
  • Desempaquete y también coloque en algún lugar de la RUTA.

Cómo editar PATH para no viajar como un cuco


La primera forma es conocida por todos: win + pausa -> Configuración avanzada del sistema -> Avanzado -> Variables de entorno. Desafortunadamente, incluso en Windows 10, en el que se agregó el editor de variables PATH, esto todavía no es muy conveniente.


Si a menudo juegas con PATH, usar la ventana de edición estándar es muy molesto. Le aconsejo que use el Editor de entorno rápido : es gratuito y ahorra mucho nervios.


Cómo conectar DLL desde MinGW en modo de desarrollo


Para iniciar la aplicación, necesita archivos dll de al menos mingw64\bin .


Desafortunadamente, no pude encontrar una solución realmente conveniente para lanzar bibliotecas de MinGW a PATH. Si algún sabio puede decir en los comentarios, estaré muy agradecido.


Ahora, la forma más fácil es adjuntar el directorio bin MinGW directamente al primer lugar en PATH. (En el caso de Visual Studio, simplemente puede colocar bibliotecas en el directorio de ensamblaje). Desafortunadamente, este método tiene un gran inconveniente: parte del software en Windows comienza a caerse inmediatamente después de la modificación de la RUTA. Por ejemplo, Overwatch dejó de funcionar para mí, y esto es algo completamente fatal.


Si usted, como yo, vive en una computadora y no solo la enciende durante el horario comercial, se propone el siguiente esquema: agregue MinGW a PATH antes de programar y luego quítelo. Para facilitar el proceso, debe crear dos archivos por lotes que se pueden iniciar haciendo doble clic:


before.bat:


 setx path "Z:\msys64\mingw64\bin;%path%" 

after.bat:


 setx PATH "%PATH:Z:\msys64\mingw64\bin;=%" 

Cómo conectar DLL en modo de lanzamiento de prueba


Está claro que el método anterior solo funciona mientras mingw64\bin está en PATH, es decir, solo en la computadora del desarrollador. E incluso allí, no siempre quieres mutilar la RUTA. Si comienza una persona común (o nosotros mismos después de after.bat), entonces algo como:





La forma más fácil de resolver este problema es colocar la dll necesaria al lado del archivo ejecutable. ¡Pero para esto necesitas saber qué dlls se usan!


Ya tenemos algunas utilidades hechas por Microsoft para esto.


  • Se puede ver una lista completa de una aplicación en ejecución usando ListDLL , pero no muestra lo que aún no se ha cargado.
  • Si dumpbin /dependents "Z:\game\build\Mingw64-Debug\src.exe" Herramientas -> Símbolo del sistema de Visual Studio, dumpbin /dependents "Z:\game\build\Mingw64-Debug\src.exe" , mostrará solo el dll de primer nivel. En otras palabras, si termina solo lo que dumpbin le dice, después del lanzamiento seguirá habiendo errores, simplemente serán sobre otras DLL.

Para ejecutar las dependencias en profundidad, existe un script de este tipo que se puede ejecutar directamente desde la línea de comandos (msys2, cygwin, etc., suficiente para tener python2 / 3 y objdump instalado en el interior).


  • Descargue el script mingw-bundledlls,
  • Poner al lado del archivo,
  • En un editor de texto, en la blacklist = [ matriz blacklist = [ agregue nuestras piezas de DirectX: d3d10.dll, d3d11.dll, d3dcompiler_43.dll ,
  • chmod 755 ./mingw-bundledlls ,
  • Para ver los ./mingw-bundledlls ./src.exe utilizados: ./mingw-bundledlls ./src.exe (bueno, cualquier ejecutable que le interese más),
  • Para copiar automáticamente y poner a continuación: ./mingw-bundledlls --copy ./src.exe
  • BENEFICIO: el ejecutable se inicia así, haciendo doble clic en el archivo exe y desde Visual Studio.

Todavía hay varias formas difíciles de contratar CMake para copiar el dll, pero si comienza a profundizar en los problemas de distribución, nunca podrá terminar este artículo.


Montaje manual


  • before.bat
  • Inicio -> Ejecutar -> cmd.exe
  • cd /dz://game/src
  • cmake -G "Ninja" -D EXECUTABLE_OUTPUT_PATH="bin" -D CMAKE_CXX_COMPILER="Z:/msys64/mingw64/bin/g++.exe" -D CMAKE_C_COMPILER="Z:/msys64/mingw64/bin/gcc.exe" .
  • ninja
  • Ejecute el archivo generado en bin inmediatamente, o adjunte el dll de acuerdo con las instrucciones anteriores y ejecute after.bat

Hemos demostrado que no estamos vinculados al IDE en absoluto.


Construir en Visual Studio


Pero aún así, desarrollar sin un IDE no es la cosa. La última vez, ya armamos una aplicación de prueba usando CLion. Pero esto es propiedad de pago y zashkvar, ¿verdad? Olvídalo. Ahora solo gratis.


En Visual Studio, la secuencia de acciones necesarias es súper simple.


  • before.bat
  • Lanzar Visual Studio;
  • Archivo -> Abrir -> CMake;
  • Seleccione CMakeLists.txt;
  • El visualizador piensa y muestra el proyecto por un tiempo;
  • Menú principal -> Caché -> Generar -> nombre del proyecto;
  • Observamos Output y corregimos los errores (por ejemplo, juré la versión CMake, tuve que bajarla a 3.11 en lugar de 3.12);
  • Menú principal -> CMake -> Cambiar configuración de CMake (seleccione MinGW64-Debug);
  • Un archivo CMakeSettings.json se genera automáticamente en el proyecto. Indicamos la ruta a MinGW allí (lo tenía en el video anterior "Z: \ msys64 \ mingw64"), guarde el archivo;
  • Menú principal -> Caché -> Generar -> CMakeLists.txt;
  • Menú principal -> Caché -> Generar -> nombre del proyecto;
  • Si todo se hace correctamente, aparecerá un elemento con el nombre del proyecto en el menú Seleccionar un elemento de inicio válido (junto a la flecha verde para iniciar la aplicación);
  • Empezamos

Como en el caso de la consola, puede iniciarla correctamente (recordando que MinGW está en PATH) o ejecutar after.bat y colocar las DLL necesarias de acuerdo con las instrucciones. DLL debe colocarse directamente en el directorio donde va la aplicación. Se puede especificar en el parámetro buildRoot en el archivo CMakeSettings.json.


Entonces, señores, lo más importante: desde Visual Studio, todo se compila y se ejecuta perfectamente. Hemos demostrado que no estamos vinculados a un IDE comercial.


Construir en Visual Studio Code


Desafortunadamente, Visual Studio todavía no es un software de código cerrado patentado. Necesitamos pasar a algo más gratuito, y esto es Visual Studio Code.


Primero gracioso mindfak. Si ejecuta VSCode en un monitor con gran escala (por ejemplo, estoy sentado en casa mirando televisión), entonces la interfaz VSCode se convertirá en un desastre. Para evitar que esto suceda, debe ejecutarlo con la clave --force-device-scale-factor (haga un acceso directo al escritorio, o algo así).


Desafortunadamente, no he dominado la administración de PATH para VSCode, por lo que la única forma de iniciarlo es modificar PATH con before.bat y otro hack, que describiré a continuación.


A continuación, debe configurar VSCode.


  • Instale CMake Tools: Ver -> Extensiones -> en la búsqueda, ingrese "CMake Tools", haga clic en instalar frente al paquete que hizo el autor del vector de bool.
  • Ver -> Explorador -> Abrir carpeta (seleccione el directorio con nuestro proyecto);
  • Paleta de comandos (CP, acceso directo Ctrl + P) -> "> CMake: Escanear en busca de kits";
  • Elija nuestro "GCC 8.2.0", al que conduce al lugar correcto donde está instalado msys2 o lo que usa allí;
  • Archivo> Preferencias> Configuración;
  • Vaya a la pestaña Configuración de usuario;
  • Haga clic en los tres puntos en la esquina superior derecha del panel y seleccione "Abrir configuración.json" en el menú;
  • Agregue las siguientes opciones:

 "cmake.configureOnOpen": true, "terminal.integrated.shell.windows": "D:/msys64/usr/bin/bash.exe", "terminal.integrated.shellArgs.windows": [ "-i" ], "terminal.integrated.env.windows": { "PATH": "/mingw64/bin;/usr/local/bin;/usr/bin;/bin;Z:/msys64/bin/;Z:/msys64/usr/local/bin;Z:/msys64/usr/bin;Z:/msys64/bin;Z:/msys64/mingw64/bin/;%PATH%" }, "cmake.buildDirectory": "${workspaceRoot}/build/${buildType}", "cmake.clearOutputBeforeBuild": true, "cmake.generator": "Ninja", "cmake.cmakePath": "C:\\my\\opt\\cmake-3.12.2-win64-x64\\cmake-3.12.2-win64-x64\\bin\\cmake.exe", "cmake.mingwSearchDirs": [ "Z:/msys64/mingw64", ], "cmake.preferredGenerators": [ "Ninja" ], "cmake.loggingLevel": "debug" 

  • La compilación debería ocurrir automáticamente, y la compilación se plegará en el directorio de build . Si esto no sucede, debe hacer clic en el botón Build con el engranaje en la línea de estado con el mouse.

Está claro que allí debe especificar directamente la ruta a mingw y cmake. "¡Pero tengo RUTA!" Solo indique, por favor, que esto resolverá una amplia gama de problemas.


Sin embargo, hay una forma exclusiva de no tirar basura a PATH.


  • "cmake.generator": "MSYS Makefiles"
  • "cmake.preferredGenerators": [ "MSYS Makefiles"]
  • Verifique que MinGW no esté en PATH (after.bat);
  • Verifique que haya eliminado el directorio de compilación en el proyecto.
  • Inicie la consola Msys2;
  • export PATH=/z/msys64/mingw64/bin;$PATH (luego puede ingresarlo en algún tipo de "~/.bashrc" )
  • Ejecute VSCode desde él, por ejemplo, así: "C:\Users\olegchir\AppData\Local\Programs\Microsoft VS Code\Code.exe"
  • Y luego todo es como antes. El archivo debe generarse normalmente.
  • Cuando intentas iniciarlo inmediatamente desde el Explorador con un doble clic, instantáneamente conduce a errores de búsqueda de DLL; esto significa que todo está correcto, realmente usamos una RUTA especial dentro de VSCode, pero no fuera.

Por lo tanto, hemos demostrado que en un IDE gratuito también podemos vivir para nosotros mismos.


Resumen


Resumiendo, si eres una persona normal, entonces puedes usar CMake, MinGW y no soplar en el bigote. Todo es libremente portátil entre el IDE, todo simplemente funciona. Podemos usar cualquier IDE pagado, cerrado y no gratuito en cualquier momento, y no seremos nada para ello. Pero todos los demás sufrirán, y con razón.


Los futuros artículos tendrán en cuenta su opinión. Puedes hacer preguntas y ofrecer sugerencias en los comentarios directamente durante la transmisión de Twitch . Si estos artículos serán en absoluto depende de cuán violentamente mueva la flecha debajo de este comentario.


                  

© Alexander Raevsky

Source: https://habr.com/ru/post/es425209/


All Articles