Używanie lokalnego pliku makefile dla CLion zamiast CMake

148

Czy istnieje sposób skonfigurowania CLion do używania lokalnego pliku makefile do kompilowania kodu zamiast CMake? Nie mogę znaleźć sposobu na zrobienie tego z opcji kompilacji.

hlin117
źródło

Odpowiedzi:

142

Aktualizacja: jeśli używasz CLion 2020.2, to obsługuje on już pliki Makefiles. Jeśli używasz starszej wersji, czytaj dalej.


Mimo że obecnie obsługiwany jest tylko CMake, możesz poinstruować CMake, aby dzwonił makez Twoim niestandardowym Makefile. Edytuj CMakeLists.txtdodanie jednego z tych dwóch poleceń:

Kiedy powiesz, CLionaby uruchomić program, spróbuje znaleźć plik wykonywalny o tej samej nazwie celu w katalogu wskazanym przez PROJECT_BINARY_DIR. Tak długo, jak długo makegeneruje plik zgodnie z CLionoczekiwaniami, nie będzie problemu.

Oto działający przykład:

Powiedz, CLionaby przekazać jego $ (PROJECT_BINARY_DIR) domake

Oto próbka 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})

Poinformuj make, aby wygenerował plik wykonywalny w CLion'skatalogu

Oto próbka Makefile:

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

To wszystko, możesz również chcieć zmienić katalog roboczy swojego programu, aby działał tak, jak to jest, gdy uruchamiasz make z wnętrza katalogu. W przypadku tej edycji:Run -> Edit Configurations ... -> mytest -> Working directory

Daniel
źródło
Nie wypróbowałem jeszcze twojej powyższej sugestii, ale czy byłbym w stanie uruchomić moje programy C / C ++ w CLion, jeśli to zrobię? (To znacznie ułatwiłoby proces debugowania.)
hlin117
3
Sprawdziłem, że rozwiązanie @ Mondkin działa. Jeśli masz problemy ze zbudowaniem projektu po zmodyfikowaniu Makefilei CMakeLists.txt, spróbuj zmodyfikować *.cppplik. To sprawiłoby, że CLion zbudowałby wszystko od zera.
hlin117
To działa, ale kiedy próbowałem dodać „make clean” do konfiguracji, kończyło się to niepowodzeniem.
71GA
1
FYI Aby to zadziałało, przynajmniej w niektórych projektach (np. Redis), musisz dodać 'ALL', co oznacza: add_custom_target (mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker
1
co powinienem zmienić, aby działał z gcc dla C
Romain-p
33

Chociaż jest to jedna z najczęściej ocenianych propozycji funkcji , dostępna jest jedna wtyczka autorstwa Victora Kroppa , która dodaje obsługę plików makefile:

Wtyczka obsługująca Makefile dla IntelliJ IDEA

zainstalować

Możesz zainstalować bezpośrednio z oficjalnego repozytorium:

Ustawienia> Wtyczki> wyszukaj makefile> Wyszukaj w repozytoriach> Zainstaluj> Uruchom ponownie

Posługiwać się

Istnieją co najmniej trzy różne sposoby uruchamiania:

  1. Kliknij prawym przyciskiem myszy plik makefile i wybierz Uruchom
  2. Otwórz plik makefile w edytorze, umieść kursor na jednym celu (w dowolnym miejscu w linii), naciśnij alt+ enter, a następnie wybierz make target
  3. Hit ctrl/ cmd+ shift+ F10na celu (chociaż ten nie działał dla mnie na Macu).

Otwiera okienko o nazwie Uruchom cel z danymi wyjściowymi.

prowadziłem
źródło
2
Tylko uwaga, jeśli wybierzesz tę trasę, przejdź do ustawień-> make i upewnij się, że kierujesz wtyczkę do katalogu instalacyjnego make. Domyślnie wygląda to w / usr / bin / make
Taylor Liss
5
Wypróbowałem twoją metodę, ale to daje tylko możliwość zbudowania twojego projektu, prawda? Nie mogę uruchomić aplikacji zbudowanej za pomocą make z tą wtyczką, czy coś mi brakuje? Mam projekt, który ma dość złożony plik Makefile i nie chcę pisać dla niego pliku CMake, ale chciałbym go zdebugować za pomocą CLiona ...
blacktemplar
@blacktemplar Nie wiem, czy możesz użyć wszystkich narzędzi do debugowania z CLion, ale powinienem być w stanie skompilować i debugować plik binarny utworzony powyższą metodą. Po prostu trochę się nim bawiłem i mogłem na przykład użyć przycisków sterujących krokiem.
wyemitowano
2
W przypadku bardziej złożonych konfiguracji jest to o wiele łatwiejsze niż zaakceptowana odpowiedź. Edycja pliku makefile tylko po to, aby go uruchomić, to szaleństwo!
Kevin,
1
Jak uruchomiłeś wygenerowany plik binarny w programie Clion? Tworzę nową konfigurację dla aplikacji, a następnie cel: wszystkie cele, plik wykonywalny: nazwa pliku binarnego, ale pojawia się ten błąd: „Nie można uruchomić binaryna <domyślnym>”
Kennet Celeste
7

Najnowsza wersja ma lepsze wsparcie dosłownie dla wszystkich generowanych plików Makefile, poprzez plik compiledb

Trzy kroki:

  1. zainstaluj compiledb

    pip install compiledb
    
  2. uruchom suchą markę

    compiledb -n make 
    

    (wykonaj autogen, skonfiguruj w razie potrzeby)

  3. zostanie wygenerowany plik compile_commands.json, który otworzy projekt i zobaczysz, że CLion załaduje informacje z pliku json. Jeśli twój CLion nadal próbujesz znaleźć CMakeLists.txt i nie możesz odczytać compile_commands.json, spróbuj usunąć cały folder, ponownie pobierz pliki źródłowe i powtórz krok 1,2,3

Orignal post: Praca z plikami Makefiles w CLion przy użyciu bazy danych kompilacji

Fengggli
źródło
1
Dobrze, że Jetbrains rozwiązuje problem, ale od 16 listopada 2018 r. Nie jest to przydatne, ponieważ nie można debugować wygenerowanego pliku wykonywalnego.
gerardw
3

Aby całkowicie uniknąć używania CMAKE, możesz po prostu:

  1. Zbuduj swój projekt w zwykły sposób za pomocą aplikacji Make za pośrednictwem terminala.

  2. Zmień konfiguracje CLion, przejdź do (w górnym pasku):
    Run -> Edit Configurations -> yourProjectFolder

  3. Zmień na Executableten wygenerowany za pomocą Make

  4. Zmień na Working directoryfolder zawierający plik wykonywalny (w razie potrzeby)

  5. Usuń Buildzadanie w Before launch:Activate tool windowpudełku

I gotowe! Możesz teraz użyć przycisku debugowania po kompilacji ręcznej.

13013SwagR
źródło
1
Moja konfiguracja, jak opisałeś, mówi „Nie ma na czym budować”, mimo że plik wykonywalny jest ustawiony i istnieje.
osioł
Tak jest. Należy zbudować ręcznie, a następnie uruchomić (bez budowania). Zauważ, że najnowsza wersja CLion wydaje się lepiej obsługiwać MakeFiles. Rozwiązanie to nadal działa, ale uważam go jako przestarzała
13013SwagR
Co byś zasugerował dla najnowszej wersji? Mam wtyczkę Makefile, ale nie obsługuje ona kompilacji / debugowania.
osioł
Powinieneś być w stanie skompilować i zgaduję, że debuguje się również z wtyczką Makefile. Zobacz Clion Doc. . Chociaż sugeruję użycie CMake, który jest w pełni obsługiwany i pozwala uniknąć wszystkich problemów. Możesz również ustawić to (myślę) za pomocą szablonu zdalnego debugowania lub użyć GDB bezpośrednio w konsoli.
13013SwagR
1

Obecnie CLion obsługuje tylko CMake. Inne systemy kompilacji zostaną dodane w przyszłości, ale obecnie możesz używać tylko CMake.

Zaimplementowano narzędzie importera, które pomaga w korzystaniu z CMake.

Edytować:

Źródło: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/

GauthierPLM
źródło
Widząc, że ten post jest już od miesiąca, a to jedyna odpowiedź, jestem przekonany, że masz rację, niestety ...
hlin117
co jeśli nie chcesz używać cmake?
Enerccio
1

Nie jestem zbyt zaznajomiony z CMake i nie mogłem bezpośrednio korzystać z rozwiązania Mondkin.

Oto, co wymyśliłem w moim CMakeLists.txt, używając najnowszej wersji CLion (1.2.4) i MinGW w systemie Windows (myślę, że wystarczy wymienić wszystkie: g ++ mytest.cpp -o bin / mytest według marki, jeśli nie używasz tej samej konfiguracji):

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

A niestandardowy plik Makefile wygląda tak (znajduje się w katalogu głównym mojego projektu i generuje plik wykonywalny w katalogu bin):

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

Jestem w stanie zbudować plik wykonywalny, a błędy w oknie dziennika są klikalne.

Podpowiedzi w IDE są dość ograniczone, co jest dużym ograniczeniem w porównaniu do czystych projektów CMake ...

Jérémy
źródło
To zadziałało dla mnie. Udało mi się sprawić, że CLion rozpoznał moje pliki źródłowe jako „aktywne”, włączając je wszystkie do mojego, set(SOURCE_FILES all_files_here.c)a następnie dodając jako add_executable(foobar_cmake ${SOURCE_FILES})dodatek do niestandardowego celu. Następnie upewnij się, że CLion jest skonfigurowany do budowania / uruchamiania niestandardowego celu, a nie _cmake.
Kevin Mark