Utilisation du makefile local pour CLion au lieu de CMake


148

Existe-t-il un moyen de configurer CLion pour utiliser un makefile local pour compiler le code, plutôt que CMake? Je n'arrive pas à trouver le moyen de le faire à partir des options de construction.

Réponses:


142

Mise à jour: si vous utilisez CLion 2020.2, il prend déjà en charge les Makefiles. Si vous utilisez une version plus ancienne, lisez la suite.


Même si actuellement seul CMake est pris en charge, vous pouvez demander à CMake d'appeler makeavec votre custom Makefile. Modifiez votre CMakeLists.txtajout de l'une de ces deux commandes:

Lorsque vous dites CLiond'exécuter votre programme, il essaiera de trouver un exécutable portant le même nom que la cible dans le répertoire pointé par PROJECT_BINARY_DIR. Donc, tant que vous makegénérez le fichier où vous le CLionsouhaitez, il n'y aura pas de problème.

Voici un exemple de travail:

Dites CLionde passer son $ (PROJECT_BINARY_DIR) àmake

Voici l'exemple CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.4)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest COMMAND make -C ${mytest_SOURCE_DIR}
                         CLION_EXE_DIR=${PROJECT_BINARY_DIR})

Dites à make de générer l'exécutable dans le CLion'srépertoire

Voici l'exemple Makefile:

all:
    echo Compiling $(CLION_EXE_DIR)/$@ ...
    g++ mytest.cpp -o $(CLION_EXE_DIR)/mytest

C'est tout, vous pouvez également changer le répertoire de travail de votre programme pour qu'il s'exécute tel quel lorsque vous exécutez make depuis l'intérieur de votre répertoire. Pour cette édition:Run -> Edit Configurations ... -> mytest -> Working directory


Je n'ai pas encore essayé votre suggestion ci-dessus, mais serais-je capable d'exécuter mes programmes C / C ++ dans CLion si je le fais? (Cela rendrait le processus de débogage beaucoup plus facile.)
hlin117

3
J'ai vérifié que la solution de @ Mondkin fonctionne. Si vous rencontrez des difficultés pour construire le projet après avoir modifié le Makefileet CMakeLists.txt, essayez de modifier un *.cppfichier. Cela permettrait à CLion de tout construire à partir de zéro.
hlin117

Cela fonctionne, mais quand j'ai essayé d'ajouter "make clean" à la configuration, cela échoue.
71GA

1
FYI Pour que cela fonctionne, au moins sur certains projets, (par exemple redis), vous devez ajouter un 'ALL', ce qui en fait: add_custom_target (mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker

1
que dois-je changer pour qu'il fonctionne avec gcc pour C
Romain-p

33

Bien que ce soit l'une des demandes de fonctionnalités les plus votées , il existe un plugin disponible, par Victor Kropp , qui ajoute la prise en charge des makefiles:

Plugin de support Makefile pour IntelliJ IDEA

Installer

Vous pouvez installer directement à partir du référentiel officiel:

Paramètres> Plugins> rechercher makefile> Rechercher dans les référentiels> Installer> Redémarrer

Utilisation

Il existe au moins trois façons différentes de fonctionner:

  1. Faites un clic droit sur un makefile et sélectionnez Exécuter
  2. Ouvrez le makefile dans l'éditeur, placez le curseur sur une cible (n'importe où sur la ligne), appuyez sur alt+ enter, puis sélectionnez make target
  3. Appuyez sur ctrl/ cmd+ shift+ F10sur une cible (bien que celle-ci ne fonctionne pas pour moi sur un mac).

Il ouvre un volet nommé Exécuter la cible avec la sortie.


2
Juste un avertissement, si vous suivez cette route, assurez-vous d'aller dans settings-> make et assurez-vous de pointer le plugin vers le répertoire d'installation de make. Par défaut, il regarde dans / usr / bin / make
Taylor Liss

5
J'ai essayé votre méthode, mais cela ne donne que l'opportunité de construire votre projet, non? Je ne peux pas exécuter une application qui a été construite avec make avec ce plugin, ou est-ce que je rate quelque chose? J'ai un projet qui a un Makefile assez complexe et je ne veux pas écrire un fichier CMake pour lui mais je voudrais le déboguer en utilisant CLion ...
blacktemplar

@blacktemplar Je ne sais pas si vous pouvez utiliser tous les outils de débogage de CLion, mais je devrais être capable de compiler et de déboguer un fichier binaire créé avec la méthode ci-dessus. J'ai juste joué un peu avec et j'ai pu utiliser les boutons de commande de pas par exemple.
iled

2
Pour des configurations plus complexes, c'est tellement plus facile que la réponse acceptée. Modifier le makefile juste pour exécuter ce makefile est de la folie!
Kevin le

1
Comment avez-vous exécuté le binaire généré dans clion? Je crée une nouvelle configuration pour Application, puis cible: Toutes les cibles, Exécutable: nom du binaire, mais j'obtiens cette erreur: "Ne peut pas fonctionner binarysur <par défaut>"
Kennet Celeste

7

La version la plus récente a un meilleur support littéralement pour tous les Makefiles générés, via le compiledb

Trois étapes:

  1. installer compiledb

    pip install compiledb
    
  2. exécuter une fabrication à sec

    compiledb -n make 
    

    (faire l'autogen, configurer si nécessaire)

  3. il y aura un fichier compile_commands.json généré pour ouvrir le projet et vous verrez que CLion chargera les informations du fichier json. Si votre CLion essaie toujours de trouver CMakeLists.txt et que vous ne pouvez pas lire compile_commands.json, essayez de supprimer tout le dossier, retéléchargez les fichiers source et refaites l'étape 1, 2, 3

Article original: Travailler avec des Makefiles dans CLion à l'aide de Compilation DB


1
Bien que Jetbrains fonctionne le problème, mais à partir du 16 novembre 2018, ce n'est pas utile car vous ne pouvez pas déboguer l'exécutable généré.
gerardw

3

Pour éviter totalement d'utiliser CMAKE, vous pouvez simplement:

  1. Construisez votre projet comme d'habitude avec Make via le terminal.

  2. Changez vos configurations CLion, allez dans (dans la barre supérieure):
    Run -> Edit Configurations -> yourProjectFolder

  3. Remplacez le Executablepar celui généré avec Make

  4. Remplacez le Working directorypar le dossier contenant votre exécutable (si nécessaire)

  5. Supprimer la Buildtâche dans la Before launch:Activate tool windowboîte

Et vous êtes prêt! Vous pouvez maintenant utiliser le bouton de débogage après votre construction manuelle.


1
Ma configuration, telle que vous l'avez décrite, dit "Rien sur lequel construire" même si l'exécutable est défini et existe.
âne le

C'est vrai. Vous devez construire manuellement puis exécuter (sans construire). Notez que la dernière version de CLion semble mieux prendre en charge les MakeFiles. Cette solution fonctionne toujours, mais je considère comme Obsolète
13013SwagR

Que suggéreriez-vous pour la dernière version? J'ai le plugin makefile mais il ne gère pas la compilation / le débogage.
âne le

Vous devriez être en mesure de compiler et je suppose également le débogage avec le plugin Makefile. Voir le Clion Doc. . Cependant, je vous suggère d'utiliser CMake qui est entièrement pris en charge et évite tous les problèmes. Vous pouvez également le configurer (je pense) avec le modèle de débogage à distance ou utiliser GDB directement dans la console.
13013SwagR

1

Actuellement, seul CMake est pris en charge par CLion. D'autres systèmes de construction seront ajoutés à l'avenir, mais actuellement, vous ne pouvez utiliser que CMake.

Un outil d'importation a été implémenté pour vous aider à utiliser CMake.

Éditer:

Source: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequent-asked-questions/


Voyant que ce message est sorti depuis un mois maintenant, et c'est la seule réponse, je suis convaincu que vous avez raison, malheureusement ...
hlin117

En creusant plus profondément dans la source du commentaire, j'ai trouvé ceci: youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117

et si vous ne souhaitez pas utiliser cmake?
Enerccio

1

Je ne connais pas très bien CMake et je ne pourrais pas utiliser directement la solution de Mondkin.

Voici ce que j'ai trouvé dans mon CMakeLists.txt en utilisant la dernière version de CLion (1.2.4) et MinGW sur Windows (je suppose que vous aurez juste besoin de remplacer tout: g ++ mytest.cpp -o bin / mytest par make if vous n'utilisez pas la même configuration):

cmake_minimum_required(VERSION 3.3)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest ALL COMMAND mingw32-make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

Et le Makefile personnalisé est comme ça (il est situé à la racine de mon projet et génère l'exécutable dans un répertoire bin):

all:
    g++ mytest.cpp -o bin/mytest

Je suis capable de créer l'exécutable et les erreurs dans la fenêtre du journal sont cliquables.

Les astuces dans l'EDI sont assez limitées, ce qui est une grande limitation par rapport aux projets CMake purs ...


Cela a fonctionné pour moi. J'ai pu faire en sorte que CLion reconnaisse mes fichiers source comme "actifs" en les incluant tous dans mon fichier set(SOURCE_FILES all_files_here.c), puis en les ajoutant add_executable(foobar_cmake ${SOURCE_FILES})à la cible personnalisée. Ensuite, assurez-vous simplement que CLion est configuré pour générer / exécuter votre cible personnalisée et non celle _cmake.
Kevin Mark
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.