Utilizzo del makefile locale per CLion anziché CMake


148

C'è un modo per configurare CLion per usare un makefile locale per compilare il codice, piuttosto che CMake? Non riesco a trovare il modo di farlo dalle opzioni di costruzione.

Risposte:


142

Aggiornamento: se si utilizza CLion 2020.2, supporta già Makefile. Se stai usando una versione precedente, continua a leggere.


Anche se attualmente è supportato solo CMake, è possibile indicare a CMake di chiamare makecon le proprie abitudini Makefile. Modifica l' CMakeLists.txtaggiunta di uno di questi due comandi:

Quando dici CLiondi eseguire il tuo programma, proverà a trovare un eseguibile con lo stesso nome della destinazione nella directory indicata da PROJECT_BINARY_DIR. Quindi, finché il tuo makegenera il file dove CLionprevisto, non ci saranno problemi.

Ecco un esempio funzionante:

Indica CLiondi passare $ (PROJECT_BINARY_DIR) amake

Questo è l'esempio 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})

Di 'a make di generare l'eseguibile nella CLion'sdirectory

Questo è l'esempio Makefile:

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

Questo è tutto, potresti anche voler cambiare la directory di lavoro del tuo programma in modo che venga eseguita così com'è quando esegui make dalla tua directory. Per questa modifica:Run -> Edit Configurations ... -> mytest -> Working directory


Non ho ancora provato il tuo suggerimento sopra, ma sarei in grado di eseguire i miei programmi C / C ++ all'interno di CLion se lo faccio? (Ciò renderebbe il processo di debug molto più semplice.)
hlin117

3
Ho verificato che la soluzione di @ Mondkin funziona. Se riscontri problemi nella creazione del progetto dopo aver modificato Makefilee CMakeLists.txt, prova a modificare un *.cppfile. Ciò farebbe in modo che CLion costruisse tutto da zero.
hlin117,

Funziona, ma quando ho provato ad aggiungere "make clean" alla configurazione fallisce.
71GA,

1
Cordiali saluti Per far funzionare tutto questo, almeno su alcuni progetti, (ad esempio redis), devi aggiungere un 'ALL', facendolo: add_custom_target (mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker,

1
cosa dovrei cambiare per farlo funzionare con gcc per C
Romain-p

33

Mentre questa è una delle richieste di funzionalità più votate , c'è un plug-in disponibile, di Victor Kropp , che aggiunge il supporto ai makefile:

Plugin di supporto per Makefile per IntelliJ IDEA

Installare

Puoi installarlo direttamente dal repository ufficiale:

Impostazioni> Plugin> cerca makefile> Cerca nei repository> Installa> Riavvia

Uso

Esistono almeno tre modi diversi per eseguire:

  1. Fare clic con il tasto destro su un makefile e selezionare Esegui
  2. Fai aprire il makefile nell'editor, posiziona il cursore su un target (in qualsiasi punto della linea), premi alt+ enter, quindi seleziona make target
  3. Premi ctrl/ cmd+ shift+ F10su un bersaglio (anche se questo non ha funzionato per me su un Mac).

Apre un riquadro denominato Esegui destinazione con l'output.


2
Solo un avvertimento, se segui questa strada, assicurati di andare in settings-> make e assicurati di puntare il plug-in alla directory di installazione di make. Di default appare in / usr / bin / make
Taylor Liss il

5
Ho provato il tuo metodo, ma questo dà solo l'opportunità di costruire il tuo progetto, giusto? Non riesco a eseguire un'applicazione creata con make con questo plugin o mi manca qualcosa? Ho un progetto che ha un Makefile piuttosto complesso e non voglio scrivere un file CMake per questo, ma vorrei eseguirne il debug usando CLion ...
blacktemplar

@blacktemplar Non so se è possibile utilizzare tutti gli strumenti di debug da CLion, ma dovrei essere in grado di compilare ed eseguire il debug di un file binario creato con il metodo sopra. Ci ho appena giocato un po 'e ad esempio sono stato in grado di utilizzare i pulsanti di controllo dei passi.
iled

2
Per configurazioni più complesse questo è molto più semplice della risposta accettata. Modificare il makefile solo per eseguirlo è una follia!
Kevin,

1
Come hai eseguito il binario generato in Clion? Creo una nuova configurazione per l'applicazione, quindi target: tutti i target, eseguibile: nome del file binario, ma viene visualizzato l'errore: "Impossibile eseguire binary<default>"
Kennet Celeste,

7

La versione più recente ha un supporto migliore letteralmente per qualsiasi Makefile generato, attraverso il compilatob

Tre passaggi:

  1. installa compilatob

    pip install compiledb
    
  2. eseguire una marca a secco

    compiledb -n make 
    

    (esegui l'autogen, configura se necessario)

  3. ci sarà un file compile_commands.json generato per aprire il progetto e vedrai che CLion caricherà le informazioni dal file json. Se il tuo CLion prova ancora a trovare CMakeLists.txt e non riesci a leggere compile_commands.json, prova a rimuovere l'intera cartella, riscaricare i file di origine e ripetere il passaggio 1,2,3

Posta originale: lavorare con Makefile in CLion usando Compilation DB


1
Bello il Jetbrains sta funzionando il problema, ma dal 16 novembre 2018 non è utile perché non è possibile eseguire il debug dell'eseguibile generato.
Gerardw,

3

Per evitare totalmente l'uso di CMAKE, puoi semplicemente:

  1. Costruisci il tuo progetto come faresti normalmente con Make through the terminal.

  2. Modifica le tue configurazioni CLion, vai a (nella barra in alto):
    Run -> Edit Configurations -> yourProjectFolder

  3. Cambia Executablein quello generato con Make

  4. Passa Working directoryalla cartella contenente l'eseguibile (se necessario)

  5. Rimuovere l' Buildattività nella Before launch:Activate tool windowcasella

E sei pronto! Ora puoi utilizzare il pulsante di debug dopo la compilazione manuale.


1
La mia configurazione come hai descritto dice "Nulla su cui basarsi" anche se l'eseguibile è impostato ed esiste.
asino,

È giusto. Dovresti compilare manualmente ed eseguire (senza creare). Si noti che la versione più recente di CLion sembra supportare meglio MakeFiles. Questa soluzione funziona ancora, ma lo considero come obsolete
13013SwagR

Cosa consiglieresti per l'ultima versione? Ho il plugin makefile ma non gestisce la compilazione / debug.
asino,

Dovresti essere in grado di compilare e sto indovinando anche il debug con il plugin Makefile. Vedi il Doc Clion. . Tuttavia, ti suggerisco di utilizzare CMake che è completamente supportato ed evita tutti i problemi. Potresti anche configurarlo (penso) con il modello di debug remoto o usare GDB direttamente nella console.
13013SwagR,

1

Attualmente, solo CMake è supportato da CLion. Altri sistemi di compilazione verranno aggiunti in futuro, ma attualmente è possibile utilizzare solo CMake.

È stato implementato uno strumento importatore per aiutarti a utilizzare CMake.

Modificare:

Fonte: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/


Visto che questo post è stato pubblicato per un mese ormai, e questa è l'unica risposta, sono convinto che tu abbia ragione, sfortunatamente ...
hlin117

Scavando più a fondo nella fonte del commento, ho trovato questo: youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117

cosa succede se non si desidera utilizzare cmake?
Enerccio,

1

Non conosco molto bene CMake e non ho potuto usare direttamente la soluzione di Mondkin.

Ecco cosa mi è venuto in mente nel mio CMakeLists.txt usando l'ultima versione di CLion (1.2.4) e MinGW su Windows (suppongo che dovrai solo sostituire tutto: g ++ mytest.cpp -o bin / mytest by make if non stai usando la stessa configurazione):

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})

E il Makefile personalizzato è così (si trova nella radice del mio progetto e genera l'eseguibile in una directory bin):

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

Sono in grado di creare il file eseguibile e gli errori nella finestra del registro sono selezionabili.

I suggerimenti nell'IDE sono piuttosto limitati, il che è una grande limitazione rispetto ai progetti CMake puri ...


Questo ha funzionato per me. Sono stato in grado di convincere CLion a riconoscere i miei file di origine come "attivi" includendoli tutti nel mio set(SOURCE_FILES all_files_here.c)e aggiungendo quindi add_executable(foobar_cmake ${SOURCE_FILES})oltre al target personalizzato. Quindi assicurati che CLion sia impostato per compilare / eseguire il tuo target personalizzato e non quello _cmake.
Kevin Mark,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.