Использование локального make-файла для CLion вместо CMake

148

Есть ли способ настроить CLion для использования локального make-файла для компиляции кода, а не CMake? Я не могу найти способ сделать это из опций сборки.

hlin117
источник

Ответы:

142

Обновление: если вы используете CLion 2020.2, то он уже поддерживает Makefiles. Если вы используете старую версию, читайте дальше.


Несмотря на то, что в настоящее время поддерживается только CMake, вы можете настроить CMake для вызова makeс вашим обычаем Makefile. Отредактируйте CMakeLists.txtдобавление одной из этих двух команд:

Когда вы скажете CLionзапустить вашу программу, она попытается найти исполняемый файл с тем же именем цели в каталоге, указанном PROJECT_BINARY_DIR. Так что, пока ваш makeгенерирует файл, где CLionожидает, не будет никаких проблем.

Вот рабочий пример:

сказать CLion передать его $ (PROJECT_BINARY_DIR)make

Это образец 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})

Скажите make для генерации исполняемого файла в CLion's каталоге

Это образец Makefile:

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

Вот и все, вы можете также захотеть изменить рабочий каталог вашей программы, чтобы она работала так же, как и при запуске make из вашего каталога. Для этого редактирования:Run -> Edit Configurations ... -> mytest -> Working directory

Даниил
источник
Я еще не попробовал ваше предложение выше, но смогу ли я выполнить свои программы на C / C ++ в CLion, если я это сделаю? (Это упростит процесс отладки.)
hlin117
3
Я проверил, что решение @ Мондкина работает. Если у вас возникли проблемы со сборкой проекта после изменения Makefileи CMakeLists.txt, попробуйте изменить *.cppфайл. Это позволило бы CLion собрать все с нуля.
hlin117
Это работает, но когда я попытался добавить «make clean» в конфигурацию, это не удалось.
71GA
1
К вашему сведению, чтобы заставить это работать, по крайней мере, в некоторых проектах (например, redis), вы должны добавить 'ALL', сделав его: add_custom_target (mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Декер
1
что я должен изменить, чтобы он работал с gcc для C
Romain-p
33

Несмотря на то, что это один из самых популярных запросов на функцию , есть один доступный плагин , Виктор Кропп , который добавляет поддержку make-файлам:

Плагин поддержки Makefile для IntelliJ IDEA

устанавливать

Вы можете установить прямо из официального репозитория:

Настройки> Плагины> Поиск makefile> Поиск в репозиториях> Установить> Перезагрузить

использование

Есть как минимум три разных способа запуска:

  1. Щелкните правой кнопкой мыши по make-файлу и выберите Run.
  2. Откройте в редакторе make-файл, наведите курсор на одну цель (в любом месте строки), нажмите alt+ enter, затем выберите make target
  3. Хит ctrl/ cmd+ shift+ F10по цели (хотя этот не работал для меня на Mac).

Откроется панель Run target с выводом.

ILED
источник
2
Просто хедсэп, если вы идете по этому пути, убедитесь, что вы идете в настройки-> make и убедитесь, что вы указываете плагин на каталог установки make. По умолчанию это выглядит в / usr / bin / make
Тейлор Лисс
5
Я попробовал ваш метод, но это дает только возможность построить ваш проект, верно? Я не могу запустить приложение, созданное с помощью make с этим плагином, или я что-то пропустил? У меня есть проект, который имеет довольно сложный Makefile, и я не хочу писать для него файл CMake, но я бы хотел отладить его с помощью CLion ...
blacktemplar
@blacktemplar Я не знаю, сможете ли вы использовать все инструменты отладки из CLion, но я должен быть в состоянии скомпилировать и отладить двоичный файл, созданный с помощью вышеуказанного метода. Я просто немного поиграл с этим и смог, например, использовать кнопки управления шагом.
ILED
2
Для более сложных конфигураций это намного проще, чем принятый ответ. Редактирование make-файла просто для запуска этого make-файла - безумие!
Кевин
1
Как вы запустили сгенерированный бинарный файл в clion? Я создаю новую конфигурацию для приложения, затем цель: все цели, исполняемый файл: имя двоичного файла, но я получаю эту ошибку: «Не удается запустить binary<default>»
Кеннет Селесте
7

Новейшая версия имеет лучшую поддержку буквально для любых сгенерированных Make-файлов, через compiledb

Три шага:

  1. установить compiledb

    pip install compiledb
    
  2. делать всухую

    compiledb -n make 
    

    (сделать автоген, настроить при необходимости)

  3. при открытии проекта будет создан файл compile_commands.json, и вы увидите, что CLion загрузит информацию из файла json. Если ваш CLion все еще пытается найти CMakeLists.txt и не может прочитать compile_commands.json, попробуйте удалить всю папку, повторно загрузить исходные файлы и повторить шаг 1,2,3

Оригинальный пост: Работа с Makefiles в CLion с использованием Compilation DB

Fengggli
источник
1
Хорошо, что Jetbrains работает над проблемой, но с 16 ноября 2018 года это бесполезно, потому что вы не можете отлаживать сгенерированный исполняемый файл.
Gerardw
3

Чтобы полностью избежать использования CMAKE, вы можете просто:

  1. Создайте свой проект как обычно с Make через терминал.

  2. Измените свои конфигурации CLion, перейдите к (в верхней панели):
    Run -> Edit Configurations -> yourProjectFolder

  3. Замените Executableна созданный с помощью Make

  4. Перейдите в Working directoryпапку, содержащую ваш исполняемый файл (при необходимости)

  5. Удалить Buildзадачу в Before launch:Activate tool windowполе

И все готово! Теперь вы можете использовать кнопку отладки после ручной сборки.

13013SwagR
источник
1
Моя конфигурация, как вы описали, говорит: «Нечего строить», даже если исполняемый файл установлен и существует.
осел
Это верно. Вы должны построить вручную, а затем запустить (без сборки). Обратите внимание, что новейшая версия CLion, кажется, лучше поддерживает MakeFiles. Это решение все еще работает, но я бы посчитал его устаревшим
13013SwagR
Что бы вы предложили для последней версии? У меня есть плагин makefile, но он не обрабатывает компиляцию / отладку.
осел
Вы должны быть в состоянии скомпилировать, и я предполагаю, что отладка также с плагином Makefile. Смотрите Clion Doc. , Тем не менее, я предлагаю вам использовать CMake, который полностью поддерживается и избегает всех проблем. Вы также можете настроить его (я думаю) с помощью шаблона удаленной отладки или использовать GDB непосредственно в консоли.
13013SwagR
1

В настоящее время CLion поддерживает только CMake. Другие системы сборки будут добавлены в будущем, но в настоящее время вы можете использовать только CMake.

Был реализован инструмент импорта, который поможет вам использовать CMake.

Редактировать:

Источник: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/

GauthierPLM
источник
Видя, что эта публикация была опубликована в течение месяца, и это единственный ответ, я убежден, что вы правы, к сожалению ...
hlin117
Копаясь глубже в источнике комментария, я нашел это: youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117
Что делать, если вы не хотите использовать cmake?
Enerccio
1

Я не очень знаком с CMake и не могу напрямую использовать решение Мондкина.

Вот что я придумал в своем CMakeLists.txt, используя последнюю версию CLion (1.2.4) и MinGW для Windows (я думаю, вам просто нужно заменить все: g ++ mytest.cpp -o bin / mytest на make, если вы не используете ту же настройку):

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

И пользовательский Makefile выглядит следующим образом (он находится в корне моего проекта и генерирует исполняемый файл в каталоге bin):

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

Я могу построить исполняемый файл и ошибки в окне журнала кликабельны.

Подсказки в IDE довольно ограничены, что является большим ограничением по сравнению с чистыми проектами CMake ...

Жереми
источник
Это сработало для меня. Я смог заставить CLion распознавать мои исходные файлы как «активные», включив их все в свою, set(SOURCE_FILES all_files_here.c)а затем добавив add_executable(foobar_cmake ${SOURCE_FILES})в дополнение к пользовательской цели. Затем просто убедитесь, что CLion настроен на сборку / запуск вашей пользовательской цели, а не на _cmake.
Кевин Марк