{"id":34317,"date":"2020-06-23T11:21:45","date_gmt":"2020-06-23T10:21:45","guid":{"rendered":"https:\/\/blog.jetbrains.com\/fr\/?p=822"},"modified":"2020-06-23T11:28:53","modified_gmt":"2020-06-23T10:28:53","slug":"la-prise-en-charge-des-projets-makefile-dans-clion-est-disponible","status":"publish","type":"post","link":"https:\/\/blog.jetbrains.com\/fr\/2020\/06\/23\/la-prise-en-charge-des-projets-makefile-dans-clion-est-disponible\/","title":{"rendered":"La prise en charge des projets Makefile dans CLion\u00a0est disponible\u00a0!"},"content":{"rendered":"La version CLion 2020.2 EAP2 apporte la tr\u00e8s attendue prise en charge des projets Makefile. Bien que cette prise en charge n'en soit encore qu'\u00e0 ses d\u00e9buts, avec diverses limitations et probl\u00e8mes connus, elle permet d\u00e9j\u00e0 de g\u00e9rer une longue liste de projets.\r\n\r\n\r\n\r\nVous avez un projet Makefile\u00a0? T\u00e9l\u00e9chargez la version EAP gratuite et essayez-la d\u00e8s maintenant. Et partagez vos commentaires avec nous\u00a0!\r\n\r\nDans cet article, nous r\u00e9pondrons aux questions suivantes\u00a0:\r\n\r\n\tComment cela fonctionne-t-il sous le capot ?\r\n\tComment d\u00e9marrer avec votre projet Makefile dans CLion\u00a0?\r\n\tQue puis-je faire si mon projet ne se charge pas correctement\u00a0?\r\n\tQuels sont les probl\u00e8mes et limitations connus\u00a0?\r\n\r\nNotre approche pour l'impl\u00e9mentation\r\nIl y a quelque temps, nous avons partag\u00e9 nos conclusions et d\u00e9crit l'approche que nous avons d\u00e9cid\u00e9 d'adopter pour la prise en charge des projets Makefile dans CLion. \u00c0 cette occasion, nous avions pr\u00e9sent\u00e9 les approches choisies par divers IDE et \u00e9diteurs C++ modernes\u00a0pour g\u00e9rer le Makefile :\r\n\r\n\tLes wrappers du compilateur sont utilis\u00e9s pour encapsuler les appels r\u00e9els du compilateur, puis une build full clean est effectu\u00e9e et les informations du projet sont extraites.\r\n\tLa variable d'environnement LD_PRELOAD est utilis\u00e9e et une biblioth\u00e8que dynamique sp\u00e9cifique est charg\u00e9e avant l'ex\u00e9cution de tout processus de build pour intercepter les appels du compilateur et collecter les informations du projet.\r\n\tLa sortie de la commande make est analys\u00e9e, souvent utilis\u00e9e avec l'option --just-print pour \u00e9viter une build r\u00e9elle.\r\n\r\nLa 3\u00e8me option offre plusieurs avantages majeurs\u00a0:\r\n\r\n\tElle n'affecte pas le processus de build.\r\n\tElle nous permet de collecter les informations plus rapidement par rapport \u00e0 la build compl\u00e8te du projet.\r\n\tElle fonctionnerait en tant qu'option \"portable\" car l'IDE peut th\u00e9oriquement commencer avec la sortie Make enregistr\u00e9e sur une autre machine.\r\n\r\nNous avons donc adopt\u00e9 la 3\u00e8me approche et impl\u00e9ment\u00e9 un prototype. Nous l'avons test\u00e9 sur une longue liste de projets, que vous pouvez trouver sur notre page Confluence. Et nous esp\u00e9rons qu'il fasse ses preuves pour de nombreux autres projets. Alors il est temps pour vous de l'essayer pour votre projet Makefile et de nous faire part de vos retours\u00a0!\r\nComment d\u00e9marrer avec votre projet Makefile dans CLion\r\nPour ouvrir un projet Makefile dans CLion\u00a0:\r\n\r\n\tS\u00e9lectionnez le projet dans File | Open.\r\n\tVous pouvez ouvrir un dossier en tant que projet et CLion recherchera les fichiers Makefile de niveau sup\u00e9rieur (ainsi que les fichiers CMakeList.txt ou compile_commands.json) et sugg\u00e9rera de l'ouvrir en tant que projet. Vous pouvez aussi pointer directement CLion vers un Makefile dans la bo\u00eete de dialogue Open.\r\n\tCLion vous demandera peut-\u00eatre de nettoyer le projet. Cette \u00e9tape est n\u00e9cessaire car la build Make est incr\u00e9mentielle et si elle s'ex\u00e9cute sur un projet non nettoy\u00e9, le rechargement du projet ne fonctionne pas correctement et ne prend pas en compte les fichiers inchang\u00e9s, donc seuls les fichiers mis \u00e0 jour sont compil\u00e9s.\r\n\tCLion va maintenant essayer de charger le projet.\r\n\tD\u00e8s que le projet est correctement charg\u00e9, vous pouvez commencer \u00e0 travailler dessus dans CLion et b\u00e9n\u00e9ficier ainsi de toutes les fonctionnalit\u00e9s intelligentes de l'IDE.\r\n\r\n\r\n\r\nVous pouvez jouer sur certains param\u00e8tres cl\u00e9s si les r\u00e9glages par d\u00e9faut ne vous conviennent pas. Cliquez sur Settings\/Preferences | Build, Execution, Deployment | Makefile settings\u00a0:\r\n\r\n\r\nIci, vous pouvez changer les \u00e9l\u00e9ments suivants\u00a0:\r\n\r\n\tLa Cha\u00eene d'outils utilis\u00e9e pour charger le projet Makefile. Toutes les cha\u00eenes d'outils locales (Clang, GCC, MinGW, Cygwin, WSL) sont prises en charge. La cha\u00eene d'outils Visual Studio s'appuie sur NMake, qui n'est actuellement pas pris en charge, mais si vous parvenez \u00e0 g\u00e9n\u00e9rer votre projet \u00e0 l'aide de GNU Make, il fonctionnera dans CLion. Le mode \u00e0 distance n'est pas encore inclus.\r\n\tLes Arguments utilis\u00e9s pour appeler la commande make dans CLion afin d'extraire les informations du projet.\r\n\tLes cibles Build et Clean utilis\u00e9es avec la commande make dans CLion pour extraire les informations du projet. Pour Build, un champ vide signifie que CLion prend la premi\u00e8re cible sp\u00e9cifi\u00e9e dans le Makefile du projet.\r\n\r\nEncore quelques astuces pour travailler avec un projet Makefile dans CLion\u00a0:\r\n\r\nAstuce 1\u00a0: CLion recherche des cibles dans votre projet Makefile afin que vous puissiez commencer \u00e0 les utiliser instantan\u00e9ment dans la configuration Run\/Debug\u00a0:\r\n\r\n\r\nEt si CLion ne parvient pas \u00e0 trouver votre cible Make, vous pouvez cr\u00e9er une cible de build personnalis\u00e9e avec le type Make et l'utiliser dans les configurations\u00a0:\r\n\r\n\r\nAstuce 2\u00a0: les builds hors source sont prises en charge, mais vous voudrez probablement appeler Tools | Makefile | Change Project Root une fois le projet charg\u00e9 afin que vos sources soient bien pr\u00e9sent\u00e9es dans la vue Projet.\r\n\r\nAstuce 3\u00a0: Actuellement, en cas de modification de fichier, comme l'ajout d'un nouveau fichier par exemple, CLion ne met pas \u00e0 jour et ne recharge pas automatiquement le projet. La notification sur le Makefile appara\u00eetra une fois que vous aurez fait la mise \u00e0 jour, afin que vous n'oubliez pas de recharger le projet. Cependant, si l'\u00e9tape de configuration est utilis\u00e9e pour votre projet, n'oubliez pas de l'appeler en premier pour mettre \u00e0 jour le Makefile et obtenir la notification.\r\n\r\nQue puis-je faire si mon projet ne se charge pas correctement\u00a0?\r\nNous avons fait des tests sur une longue liste de projets, que vous pouvez trouver sur notre page Confluence. Et nous esp\u00e9rons le voir faire ses preuves \u00e9galement sur un large \u00e9ventail d'autres projets, y compris le v\u00f4tre. Si toutefois vous rencontriez des probl\u00e8mes, voici une liste de ce que vous pouvez faire\u00a0:\r\n\r\n\tV\u00e9rifiez la cha\u00eene d'outils que vous utilisez dans Settings\/Preferences | Build, Execution, Deployment | Makefile settings. Vous devez pouvoir construire le projet dans l'environnement s\u00e9lectionn\u00e9.\r\n\tContr\u00f4lez les arguments de rechargement et la cible de build dans Settings\/Preferences | Build, Execution, Deployment | Makefile settings. La plupart des projets qui ont fonctionn\u00e9 correctement pour nous s'accommodaient bien de l'argument par d\u00e9faut, mais vous pouvez avoir besoin de quelques modifications dans votre cas.\r\n\tEssayez Tools\u00a0| Makefile | Clean and Reload Makefile Project.\r\n\tSi les \u00e9tapes ci-dessus ne vous aident pas, essayez de nettoyer le projet \u00e0 partir de \/makefiles dans le r\u00e9pertoire syst\u00e8me. Par exemple, pour le projet postgres sur mon macOS, il s'agit de ~\/Library\/Caches\/JetBrains\/CLion2020.2\/makefiles\/postgres.dc29ef090. Rechargez le projet apr\u00e8s cela.\r\n\tEnfin, si les astuces ci-dessus ne fonctionnent pas pour vous, allez dans Help | Diagnostic Tools | Debug Log Settings\u2026 et activez les journaux de d\u00e9bogage en ajoutant #com.jetbrains.cidr.cpp.makefile. Ensuite, reproduisez le probl\u00e8me et envoyez les journaux \u00e0 notre outil de suivi ou \u00e0 notre service d'assistance.\r\n\r\nProbl\u00e8mes et limitations connus\r\nLa partie la plus fragile de l'algorithme utilis\u00e9 est l'extraction des commandes de compilation de la sortie de la commande make. Nous avons constat\u00e9 des probl\u00e8mes dans certains cas\u00a0:\r\n\r\n\tLe projet supprime l'impression des r\u00e9pertoires. Et donc l'algorithme ne parvient pas \u00e0 d\u00e9tecter correctement les fichiers source en cours de g\u00e9n\u00e9ration.\r\n\tLe compilateur est inconnu ou les indicateurs de compilation ne peuvent pas \u00eatre extraits correctement. Plusieurs wrappers comme libtool aggravent les choses en masquant les indicateurs de compilation et en interf\u00e9rant avec la sortie du Make (CPP-19549, CPP-19305).\r\n\r\nNous avons int\u00e9gr\u00e9 plusieurs heuristiques pour surmonter les cas similaires \u00e0 ceux rencontr\u00e9s sur nos projets de test. Les utilisateurs peuvent \u00e9galement contr\u00f4ler les arguments utilis\u00e9s pour appeler la commande make lors de l'extraction des informations du projet\u00a0: Settings\/Preferences | Build, Execution, Deployment | Makefile | Arguments.\r\n\r\nQu'est-il pr\u00e9vu pour la suite ?\r\n\r\n\tIl existe un plugin de prise en charge de Makefile qui fournit la mise en \u00e9vidence du code et une prise en charge partielle de la g\u00e9n\u00e9ration de projets make. Nous allons le retravailler et l'int\u00e9grer dans CLion (CPP-16933).\r\n\tL'int\u00e9gration des tests unitaires sera activ\u00e9e pour les projets Makefile ult\u00e9rieurement (CPP-20718).\r\n\tAjouter la possibilit\u00e9 de lier Makefile \u00e0 un projet existant (CPP-20733).\r\n\tLa modification de la cha\u00eene d'outils ou d'autres param\u00e8tres affectant le chargement du projet pour d\u00e9clencher le rechargement (CPP-18982).\r\n\tPour \u00e9tendre la prise en charge des projets GNU Autotool, autoriser les utilisateurs \u00e0 param\u00e9trer l'\u00e9tape de \"pr\u00e9configuration\" pour les projets Makefile (CPP-16924).\r\n\tPrendre en charge des Makes non GNU (NMake, BSD) (CPP-18723).\r\n\tImpl\u00e9menter l'approche avec les wrappers du compilateur pour la rendre fonctionnelle en combinaison avec l'approche actuelle.\r\n\r\nMais avant tout cela, nous allons peaufiner le prototype actuel et r\u00e9soudre plusieurs probl\u00e8mes. Et \u00e0 ce stade, vos retours sont vraiment importants pour nous. Veuillez nous signaler tout probl\u00e8me rencontr\u00e9 via notre outil de suivi.\r\n\r\nGardez en t\u00eate la liste des projets sur lesquels nous avons d\u00e9j\u00e0 test\u00e9 notre prototype\u00a0: Projets Makefile dans CLion.\r\nT\u00c9L\u00c9CHARGER CLION 2020.2 EAP\r\nL'\u00c9quipe CLion\r\nJetBrains\r\nThe Drive to Develop\r\n\r\nAuteur de l'article original\u00a0en anglais :\u00a0Anastasia Kazakova","protected":false},"excerpt":{"rendered":"La version CLion 2020.2 EAP2 apporte la tr\u00e8s attendue prise en charge des projets Makefile. Bien que cette prise en charge n'en soit encore qu'\u00e0 ses d\u00e9buts, avec diverses limitations et probl\u00e8mes conn","protected":false},"author":{"name":"Delphine Massenhove","link":"https:\/\/blog.jetbrains.com\/fr\/author\/delphine-massenhovejetbrains-com"},"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[601],"tags":[5653],"cross-post-tag":[],"acf":[],"featured_image":null,"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts\/34317"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"},{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=34317"}],"version-history":[{"count":0,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/posts\/34317\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=34317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=34317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=34317"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=34317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}