Sunrise Manually # 2: Hardcore pour IDE, Cmake et ma déception chez les animaux

Dans un article précédent, j'ai eu l'audace d'utiliser CLion comme IDE. Et puis un homme est venu en courant avec une question: oh, un métier rémunéré propriétaire, vendu, ricané, etc. En toute justice, il n'y avait qu'un seul commentaire de ce genre sur Habré, mais en réalité, il y en a des milliers. Par exemple, le dernier compte LOR actif, je suis inscrit depuis 2010, et dans presque toutes les discussions impliquant des logiciels propriétaires, cet enfer commence. Il est clair que je ne prouverai rien à personne, mais cela peut aider les rares vagabonds à passer.


L'article est conditionnellement divisé en deux parties: socialement motivationnel et technique (comment construire CMake sur Windows sous divers IDE).




Où est-ce que tout est allé


Ce commentaire de l'article précédent était la base de l'article : «Si le podcast est destiné aux débutants et aux non-professionnels, alors pourquoi n'avez-vous pas pris en compte la licence IDE :(» et ci-après.


L'article est basé sur les résultats d'un flux Twitch et vos commentaires à ce sujet. L'enregistrement est sur YouTube. Cet article n'est pas une transcription d'un podcast, mais un produit de sa compréhension.



Message source


Tout d'abord, vérifions la validité de l'hypothèse d'origine: le logiciel coûte cher. Si vous allez sur le site, il s'avère que CLion coûte 8,90 dollars par mois. 580 roubles. Il est clair que pour une personne qui ne fait pas de programmation pour gagner sa vie - cela peut parfois montrer un montant décent qui peut être dépensé pour quelque chose de plus utile. Achetez un repas, par exemple.


Pour un professionnel, tout est complètement différent, mais laissons ce sujet. Un journaliste se distingue d'un employé du département marketing d'une entreprise de fabrication de logiciels ou de jeux en ce qu'il ne fait pas la promotion de la politique du Parti, ne prend aucune mesure pour promouvoir le produit. Il parle tel quel. Comment tout cela est-il vraiment, comment un journaliste voit-il vraiment une question? La même chose s'applique aux vrais évangélistes.


L'essence des phénomènes, et la chaîne d'années,
Visages d'amis et masques d'ennemis,
Clairement visible et ne peut pas se cacher
Aux yeux du poète - le propriétaire des siècles.

La lumière des étoiles lointaines et le début de l'aube
Les secrets de la vie et les secrets de l'amour
Dans un moment d'inspiration, réchauffé par le soleil -
Tout se reflète dans l'âme du poète -
Dans le miroir du monde ...

(c) Konstantin Nikolsky, Miroir du monde

S'il est vraiment intéressant de voir comment CLion augmente vos revenus, vous trouverez quelqu'un à contacter, et ici nous parlons d'autre chose.


Typologie


Envisagez plutôt des groupes de personnes qui sont bombardées autant que possible à partir d'un logiciel fermé.


Comme vous l'avez déjà compris, je ne suis pas un nifiga sociologue, et je n'ai que la typologie qui s'est développée dans le feu de l'action des confrontations du forum. Il a seulement l'avantage qu'il est possible d'attribuer une personne à un certain groupe pratiquement sans inclure le cerveau en regardant les deux premiers commentaires.


Donc, les gens sont:


  • Les combattants de la liberté et l'open source
  • Honnêtement trompé
  • Les animaux

Je suggère de ne pas considérer l’inexactitude de l’auteur. Je suis une autre affaire .


Les combattants de la liberté et l'open source


Les plus purs et les plus brillants sont les combattants de l'ouvreur. Je suis moi-même de ceux qui, après avoir entendu le mot "Linux", corrige constamment "non pas Linux, mais GNU / Linux" . Le problème est que le monde réel n'est jamais noir et blanc. Nous avons une certaine liberté, et c'est une ressource qui peut être utilisée si nécessaire. Comme un membre de la direction de Mozilla a plaisanté (ou non), "pourquoi avons-nous besoin d'un crédit de confiance si nous ne le dépensons pas?".


Exemple: il y avait une telle personne, Miguel de Icaza. Il a créé Gnome et a contribué à la construction d'un GNU / Linux désopilant comme nous le connaissons. Et puis il a été expulsé de la communauté, et Stallman l'a traité de «traître à la liberté»:


«Miguel de Icaza est essentiellement un traître à la communauté du logiciel libre. <...> Le projet vise à organiser le fonctionnement de programmes soi-disant «open source» sur la plate-forme Windows; ainsi, le temps inestimable des développeurs est consacré aux plates-formes gratuites »

Et où est Miguel maintenant? Lui et son équipe travaillent côte à côte avec l'un des plus grands projets de ces dernières années: porter .NET sur GNU / Linux sous des licences permissives. Il a vraiment passé son temps.


Sur le flux, j'ai tué au moins vingt minutes pour trébucher CMake sous Visual Studio Code. Ça n'a pas marché. Et dans Visual Studio gratuit, mais pas gratuit, cela s'est avéré la première fois. C'est exactement ce que nous obtenons si souvent en essayant d'utiliser des logiciels libres: dans l'open source, pour des raisons évidentes, nous n'avons pas le temps de réfléchir à des scripts de bout en bout et de prendre soin de l'ensemble du produit. Merci aux développeurs d'avoir fait au moins quelque chose. Mais pour nous, en tant qu'utilisateurs, nous avons toujours un choix moral et éthique: soit choisir la liberté et passer beaucoup de temps à donner un coup de pied au logiciel libre, soit, au contraire, passer notre liberté à acheter du temps, qui peut ensuite être consacré à de bonnes actions.


Étant donné que ce problème dépasse le cadre des problèmes techniques, nous terminerons ici. Une personne vraiment idéologique est fidèle à son idée.


Les animaux


Oh, mais cette catégorie me bombarde.


"Les caractéristiques spécifiques d'une personne qui la distinguent des autres animaux sont la posture droite, un cerveau très développé, la pensée et la parole articulée. Une personne étudie et change elle-même et le monde qui l'entoure, crée une culture et sa propre histoire." (c) Wikipédia .

Malheureusement, dans une conversation sur l'IDE, il s'avère souvent que l'interlocuteur n'est pas capable de penser de manière indépendante, au lieu de parler clairement, il marmonne "et j'ai déjà des normes" et mange ce qu'elles donnent. En raison de la position verticale, il est facile de le confondre avec une personne, mais ne vous y trompez pas.


Ces créatures montent tout pour n'importe qui. Dans les jeux, ils vendent des lootboxes et des DLC avec une musique nostalgique. Dans les éditeurs, ils sont placés sur diverses choses occupées analement, dans le but de relier le patient à un environnement, un écosystème spécifique, et à tel point qu'aucun phénazépam n'est nécessaire. Ils mangeront tout. "Et les normes aussi pour moi."


Il est important d'ajouter que non seulement les spécialistes du marketing conduisent sur leurs oreilles, mais aussi que les trolls ou les schémas cliniques naturels. Il y a beaucoup de schizos, vous n'en croirez pas combien.


Par exemple, rappelez-vous le manifeste que Nikitonsky a récemment publié (plus précisément, sa traduction dans Habr): Ma déception pour le logiciel ? Comment je me fais bombarder de lui. J'espère sincèrement que Nikitonsky a écrit tout cela pour toucher sciemment, et pas vraiment.


Regardez quelles thèses sont là:


  • Tout est insupportablement lent - un téléphone moderne est plus puissant que les ordinateurs qui envoient des gens sur la lune;
  • Tout est ÉNORME - Android pèse 6 gigaoctets;
  • Tout pourrit - les vieux appareils ne fonctionnent pas ou fonctionnent mal;
  • Dans la programmation du chaos, regardez les graphiques de dépendance dans npm et left-pad.

La pêche à la traîne est une pêche à la traîne, mais il peut ne pas être familier à quelqu'un que la taille du code source est «ce qui a amené la personne sur la lune», c'est-à-dire Apollo 11, de sorte que l'auteur voudrait à peine les lire.




Que les OS modernes définissent n'importe quel équipement et ont tout pour chaque occasion. Que le ralentissement des appareils a conduit à une situation merveilleuse lorsque les capitalistes de Merissa se sont baissés et ont développé le fer à un niveau moderne, grâce auquel nous avons dans notre poche un méga-appareil pour toutes les occasions. Même les serviettes ne sont pas nécessaires, c'est sur Google Play. Le npm mentionné permet à une personne ordinaire d'écrire des choses d'une complexité inimaginable qui prendraient des années auparavant.


Et puis à tous ces camarades qui "mangent ce qu'ils donnent", soudain, des méga idées de la liste ci-dessus commencent à me monter dans la tête. Etendons à l'IDE:


  • Pour les applications sur Electron (Visual Studio Code, Atom), les lettres apparaissent trop lentement à l'écran, que ce soit vim ou emacs;
  • Eclipse IDE ralentit;
  • En général, Java ralentit - avec tout ce qui y est écrit, y compris NetBeans, IDEA et Clion;
  • Tout IDE ralentit manger pour cent comme ça;
  • La propriété est mauvaise;
  • La liste continue.

Cette liste est déjà suffisante pour réviser le toit. Ne croyez pas les ordures. Si vim est meilleur qu'Eclipse (ou vice versa) dans certains cas, ce n'est certainement pas parce que les voisins irradient les vimers avec un micro-ondes et que les extraterrestres enlèvent des éclipseurs la nuit.


Malheureusement, à la suite de longues guerres de guerres en réseau, il a été établi avec précision: il ne peut y avoir de dialogue. À l'homme - humain et à l'animal - animal. C'est ainsi que la vie est organisée. La probabilité que quelqu'un lise cet article et change d'avis est extrêmement faible, immolée et améliorée .


Honnêtement trompé


Maintenant, nous en avons fini avec les extrêmes: particulièrement intelligents de la secte Stallman d'un côté du spectre, et pas d'animaux très intelligents de l'autre, parlons des gens ordinaires.


La première idée fausse est que nous sommes en quelque sorte cloués sur l'IDE. Cela remonte à l'époque où les gens utilisaient une sorte de Delphi 7 et des versions anciennes de Microsoft Visual Studio. Ils disent que dans la nouvelle Vizhualka, tout allait bien avec les fichiers du projet. Bonjour, c'est maintenant l'année 2018, il n'y a plus d'esclavage.


Pour se débarrasser de l'esclavage, nous avons reçu CMake d'en haut: un outil utilitaire open source multiplateforme qui vous permet de créer, tester et empaqueter des applications.


Cela ne dit toujours rien au débutant et ses bras atteignent l'IDE. Tout cela par peur et incompréhension de ce qui se passe. Je viens moi-même de Java, et je sais donc bien comment les yeux d'une personne qui a vu pom.xml pour la première fois se dilater pour la première fois.


Voyons en quoi consiste le projet créé la dernière fois et comment le construire dans toutes sortes d'IDE différents.


Composition du fichier:



Le shader est compilé directement en runtime, avec la fonction D3DCompile . Le D3DCompiler du SDK DirectX (qui est maintenant le SDK Windows) fonctionne. Aucun IDE n'est nécessaire pour le construire.


main.cpp est le seul fichier à construire. Et il est collecté à l'aide d'informations qui se CMakeLists.txt entièrement dans CMakeLists.txt .


Dans le sens inverse: il y a CMakeLists.txt , qui nous dit exactement ce que nous allons compiler. L'assembly main.cpp enregistré. Cela suffit pour compiler le projet. Après la compilation, un fichier exe est obtenu qui, après le lancement, recueille le shader et l'affiche à l'écran. Tout est extrêmement simple, l'IDE n'est pas impliqué dans cette chaîne et peut être n'importe quoi.


IDE est facultatif. Généralement. Qu'est-ce qui est incompréhensible ici?


Assemblage


Moments préparatoires


Comme toujours, la préparation occupe la majeure partie du processus. Il y a quelques choses qui doivent être clarifiées.


On suppose que tout se fait sur la base de Msys2, que nous avons installé la dernière fois . Si ce n'est pas le cas, vous devrez vous démêler :)


Comment installer CMake et Ninja


Pour pouvoir collecter quelque chose, vous devez installer CMake, si vous ne l'avez pas déjà fait.


  • Téléchargez depuis le site: https://cmake.org/download . J'ai cmake-3.12.2-win64-x64;
  • Décompressez et ajoutez le chemin à l'endroit où se trouve cmake.exe dans la variable d'environnement Windows PATH;
  • Téléchargez sur le site le générateur ninja de la dernière version ;
  • Déballez et placez quelque part dans le CHEMIN.

Comment éditer PATH pour ne pas voyager comme un coucou


La première façon est connue de tous: win + pause -> Paramètres système avancés -> Avancé -> Variables d'environnement. Malheureusement, même dans Windows 10, dans lequel l'éditeur de variable PATH a été ajouté, ce n'est toujours pas très pratique.


Si vous jouez souvent avec PATH, l'utilisation de la fenêtre d'édition standard est très ennuyeuse. Je vous conseille d'utiliser l' éditeur d'environnement rapide - il est gratuit et économise considérablement les nerfs.


Comment connecter une DLL à partir de MinGW en mode développement


Pour démarrer l'application, vous avez besoin de fichiers dll d'au moins mingw64\bin .


Malheureusement, je n'ai pas trouvé de solution vraiment pratique pour lancer des bibliothèques de MinGW vers PATH. Si un sage peut le dire dans les commentaires, je vous en serai très reconnaissant.


Maintenant, le moyen le plus simple consiste à attacher le répertoire bin MinGW directement à la première place dans PATH. (Dans le cas de Visual Studio, vous pouvez simplement déposer des bibliothèques dans le répertoire d'assembly.) Malheureusement, cette méthode a un énorme inconvénient: certains logiciels de Windows commencent à tomber immédiatement après la modification de PATH. Par exemple, Overwatch a cessé de fonctionner pour moi, et c'est une chose complètement fatale.


Si vous, comme moi, vivez dans un ordinateur et que vous ne l'allumez pas uniquement pendant les heures de bureau, le schéma suivant est proposé: ajoutez MinGW à PATH avant de programmer, puis supprimez-le. Pour faciliter le processus, vous devez créer deux fichiers batch qui peuvent être lancés en double-cliquant:


before.bat:


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

after.bat:


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

Comment connecter une DLL en mode de version de test


Il est clair que la méthode précédente ne fonctionne que lorsque mingw64\bin est dans PATH, c'est-à-dire uniquement sur l'ordinateur du développeur. Et même là, vous ne voulez pas toujours mutiler PATH. Si cela commence une personne ordinaire (ou nous-mêmes après after.bat), alors quelque chose comme:





Le moyen le plus simple de résoudre ce problème consiste à placer la DLL nécessaire à côté du fichier exécutable. Mais pour cela, vous devez savoir quelles DLL sont utilisées!


Nous avons déjà quelques utilitaires conçus par Microsoft pour cela.


  • Une liste complète d'une application en cours d'exécution peut être consultée à l' aide de ListDLL , mais elle ne montre pas ce qui n'est pas encore chargé.
  • Si vous faites Outils -> Invite de commandes Visual Studio, dumpbin /dependents "Z:\game\build\Mingw64-Debug\src.exe" , alors il n'affichera que la DLL de premier niveau. En d'autres termes, si vous ne terminez que ce que la décharge vous dit, après le lancement, il y aura toujours des erreurs - elles concerneront simplement d'autres DLL.

Pour parcourir les dépendances en profondeur, il existe un tel script qui peut être exécuté directement à partir de la ligne de commande (msys2, cygwin, etc. - assez pour avoir python2 / 3 et objdump installés à l'intérieur).


  • Téléchargez le script mingw-bundledlls,
  • Mettez à côté du fichier,
  • Dans un éditeur de texte, dans la blacklist = [ tableau blacklist = [ ajoutez nos pièces DirectX: d3d10.dll, d3d11.dll, d3dcompiler_43.dll ,
  • chmod 755 ./mingw-bundledlls ,
  • Pour voir les ./mingw-bundledlls ./src.exe utilisées: ./mingw-bundledlls ./src.exe (enfin, tout exécutable qui vous intéresse plus),
  • Pour copier automatiquement et mettre ensuite: ./mingw-bundledlls --copy ./src.exe
  • PROFIT: l'exécutable est lancé comme ça, en double-cliquant sur le fichier exe, et depuis Visual Studio.

Il existe encore différentes façons délicates de contracter CMake pour copier la DLL elle-même, mais si vous commencez à vous plonger dans des problèmes de distribution, vous ne pourrez jamais terminer cet article.


Assemblage manuel


  • before.bat
  • Démarrer -> Exécuter -> 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
  • Exécutez immédiatement le fichier généré dans bin ou attachez la dll selon les instructions ci-dessus et exécutez after.bat

Nous avons prouvé que nous ne sommes pas du tout liés à l'IDE.


Construire dans Visual Studio


Mais quand même, développer sans IDE n'est pas la chose. La dernière fois, nous avons déjà créé une application de test à l'aide de CLion. Mais c'est la propriété payante et zashkvar, non? Oubliez ça. Maintenant seulement gratuit.


Dans Visual Studio, la séquence d'actions nécessaires est super simple.


  • before.bat
  • Lancez Visual Studio;
  • Fichier -> Ouvrir -> CMake;
  • Sélectionnez CMakeLists.txt;
  • Le visualiseur réfléchit et affiche le projet pendant un certain temps;
  • Menu principal -> Cache -> Générer -> nom du projet;
  • Nous regardons Output et corrigeons les erreurs (par exemple, j'ai juré sur la version CMake, j'ai dû la baisser à 3.11 au lieu de 3.12);
  • Menu principal -> CMake -> Modifier les paramètres de CMake (sélectionnez MinGW64-Debug);
  • Un fichier CMakeSettings.json est généré automatiquement dans le projet. Nous indiquons le chemin vers MinGW là (je l'avais dans la vidéo précédente "Z: \ msys64 \ mingw64"), enregistrez le fichier;
  • Menu principal -> Cache -> Générer -> CMakeLists.txt;
  • Menu principal -> Cache -> Générer -> nom du projet;
  • Si tout est fait correctement, un élément avec le nom du projet apparaîtra dans le menu Sélectionner un élément de démarrage valide (à côté de la flèche verte pour lancer l'application);
  • Nous commençons.

Comme dans le cas de la console, vous pouvez soit la démarrer correctement (en vous rappelant que MinGW est dans PATH), soit exécuter after.bat et placer les DLL nécessaires selon les instructions. La DLL doit être placée directement dans le répertoire où l'application va. Il peut être spécifié dans le paramètre buildRoot du fichier CMakeSettings.json.


Alors, messieurs, la chose la plus importante: à partir de Visual Studio, tout se compile et fonctionne parfaitement. Nous avons prouvé que nous ne sommes pas liés à un IDE commercial.


Construire dans Visual Studio Code


Malheureusement, Visual Studio n'est toujours pas un logiciel propriétaire fermé. Nous devons passer à quelque chose de plus gratuit, et c'est Visual Studio Code.


Premier mindfak drôle. Si vous exécutez VSCode sur un moniteur à grande échelle (je suis assis à la maison devant la télévision, par exemple), l'interface VSCode se transformera en un gâchis. Pour éviter cela, vous devez l'exécuter avec la clé --force-device-scale-factor (créez un raccourci vers le bureau, ou quelque chose comme ça).


Malheureusement, je ne maîtrisais pas la gestion de PATH pour VSCode, donc la seule façon de le démarrer est de modifier PATH avec before.bat et un autre hack, que je décrirai ci-dessous.


Ensuite, vous devez configurer VSCode.


  • Installer CMake Tools: Affichage -> Extensions -> dans la recherche, entrez "CMake Tools", cliquez sur installer devant le package créé par l'auteur de vector-of-bool.
  • Affichage -> Explorateur -> Ouvrir le dossier (sélectionnez le répertoire avec notre projet);
  • Palette de commandes (CP, raccourci Ctrl + P) -> "> CMake: Scan for Kits";
  • Choisissez notre "GCC 8.2.0", vers lequel il mène au bon endroit où msys2 est installé ou ce que vous y utilisez;
  • Fichier> Préférences> Paramètres;
  • Accédez à l'onglet Paramètres utilisateur;
  • Cliquez sur les trois points dans le coin supérieur droit du panneau et sélectionnez "Open settings.json" dans le menu;
  • Ajoutez les options suivantes:

 "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 construction devrait se produire automatiquement et la construction sera repliée dans le répertoire de build . Si cela ne se produit pas, vous devez cliquer sur le bouton Build avec l'engrenage dans la ligne d'état avec la souris.

Il est clair que vous devez spécifier directement le chemin vers mingw et cmake. "Mais j'ai PATH!" Veuillez simplement indiquer, s'il vous plaît, que cela résoudra toute une série de problèmes.


Il existe cependant un moyen exclusif de ne pas jeter la corbeille dans PATH.


  • "cmake.generator": "MSYS Makefiles"
  • "cmake.preferredGenerators": [ "MSYS Makefiles"]
  • Vérifiez que MinGW n'est pas dans PATH (after.bat);
  • Vérifiez que vous avez supprimé le répertoire de génération dans le projet.
  • Lancez la console Msys2;
  • export PATH=/z/msys64/mingw64/bin;$PATH (vous pouvez ensuite le saisir dans une sorte de "~/.bashrc" )
  • Exécutez VSCode à partir de celui-ci, par exemple, comme ceci: "C:\Users\olegchir\AppData\Local\Programs\Microsoft VS Code\Code.exe"
  • Et puis tout est comme avant. Le fichier doit être généré normalement.
  • Lorsque vous essayez de le démarrer immédiatement à partir d'Explorer avec un double-clic, cela entraîne instantanément des erreurs de recherche de DLL - cela signifie que tout est correct, nous utilisons vraiment un CHEMIN spécial à l'intérieur de VSCode, mais pas à l'extérieur.

Nous avons donc prouvé que dans un IDE gratuit, nous pouvons également vivre tout à fait par nous-mêmes.


Résumé


En résumé, si vous êtes une personne normale, vous pouvez utiliser CMake, MinGW et ne pas souffler dans la moustache. Tout est librement portable entre l'IDE, tout fonctionne simplement. Nous pouvons utiliser n'importe quel IDE payant, fermé et non gratuit à tout moment, et nous ne serons rien pour cela. Mais tout le monde en souffrira, et à juste titre.


Les prochains articles tiendront compte de votre opinion. Vous pouvez poser des questions et faire des suggestions dans les commentaires juste pendant le flux Twitch . La pertinence de ces articles dépend de la violence avec laquelle vous faites défiler la flèche sous ce commentaire.


                  

© Alexander Raevsky

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


All Articles