Можно ли настроить CLion для самостоятельной компиляции исходных файлов в проекте?

В настоящее время я выполняю некоторые задачи Project Euler на C, используя JetBrains CLion IDE. Когда я выполнял их на Python и Java (в PyCharm и IntelliJ соответственно), я всегда мог создать один проект с именем «ProjectEuler» и добавить любое количество исходных файлов, которые я мог выполнять независимо. Однако похоже, что в CLion это невозможно. Каждый из исходных файлов, которые я использую для решения проблемы, содержит функцию main(), и CMake недоволен этим каждый раз, когда я пытаюсь скомпилировать ("множественное определение 'main'").

Есть ли способ настроить CLion для компиляции и выполнения только одного исходного файла в проекте за раз без необходимости переписывать мой CMakeLists.txt или каждый раз создавать новый проект для каждой проблемы?

Я знаю, что C компилируется, а не интерпретируется, как Java или Python, но я вполне мог бы просто скомпилировать каждый исходный файл вручную. Есть ли способ настроить CLion, чтобы он делал то же самое? Если да, то как?


person nidorion    schedule 14.05.2015    source источник


Ответы (5)


Вы можете определить несколько исполняемых файлов в CMakeLists.txt для каждой проблемы.

вместо

add_executable(projecteuler ${SOURCE_FILES})

вы могли бы определить

add_executable(problem1 problem1.c)
add_executable(problem2 problem2.c)

Затем вы получаете для каждого исполняемого файла (проблема1, проблема2 и т. д.) конфигурацию запуска, которую вы можете запускать независимо. В этом случае вам не придется каждый раз переписывать, вместо этого вы просто добавляете новый исходный файл в новый исполняемый файл.

person ipa    schedule 16.05.2015
comment
Нет способа заставить CLion автоматически добавлять источник? Я знаю, что добавить нечего, но могло быть и лучше - person InvisibleUn1corn; 18.05.2015
comment
Если вы добавляете новый исходный файл C++ или файл заголовка, вы можете установить флажок Добавить в цели, а затем выбрать цели/исполняемые файлы, в которые вы хотите добавить файл, в CMakeLists.txt. Но цель должна быть уже в файле CMakeLists.txt. - person ipa; 18.05.2015
comment
@InvisibleUn1corn Я согласен, что было бы неплохо, если бы нам было проще добавить add_executable. Для этого я сделал плагин для CLion C/C++ Single File Execution Plugin. - person corochann; 12.05.2016

Даже я столкнулся с той же проблемой, это утомительная работа по редактированию файла CMake и добавлению исполняемого файла каждый раз. Итак, я нашел решение этого,

Есть плагин, который сделает это за вас.

Просто добавьте этот плагин в свой CLion и любой другой файл. чтобы сделать его исполняемым, щелкните правой кнопкой мыши и добавьте его как исполняемый файл,

Он автоматически отредактирует ваш файл CMake.

Связь:

https://plugins.jetbrains.com/plugin/8352-cc--single-file-execution

person Shantanu Dwivedi    schedule 18.01.2019

Вы можете использовать

cmake_minimum_required(VERSION 2.8.4)

add_subdirectory(src/prj1)
add_subdirectory(src/prj2)

затем в каждом каталоге создайте другой CMakeLists.txt, подобный этому:

cmake_minimum_required(VERSION 2.8.4)
project(prj1)

set(EXEC_NAME prj1)

set(SOURCE_FILES
    main_prj1.cpp
    x.cpp
    y.cpp
)

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

set(EXECUTABLE_OUTPUT_PATH ../../dist/${CMAKE_BUILD_TYPE})

add_executable(${EXEC_NAME} ${SOURCE_FILES})

Вы можете использовать file(GLOB SOURCE_FILES *.cpp), если хотите автоматически добавлять файлы в компиляцию. Но имейте в виду, что эта «фишка» категорически не поощряется.

Это также автоматически добавит конфигурации сборки в CLion.

person Waxo    schedule 19.05.2015

Вы можете добавить эти строки в свой CMakeLists.txt.

    #GLOB_RECURSE will find files in all subdirectories that match the globbing expressions and store it into the variable.
    file(GLOB_RECURSE APP_SOURCES *.c)
    foreach (testsourcefile ${APP_SOURCES})
        #get filename without extension
        get_filename_component(testname ${testsourcefile} NAME_WE)
        #add executable for all file
        add_executable(${testname} ${testsourcefile})
    endforeach (testsourcefile ${APP_SOURCES})

Вам придется перезагружать проект cmake (Инструменты -> Cmake) каждый раз, когда вы добавляете или удаляете файлы из своего проекта. Также время сборки увеличится, если вы добавите больше файлов. В качестве альтернативы вы можете создать больше каталогов и подкаталогов и использовать file(GLOB_RECURSE APP_SOURCES path/to/*.c), чтобы он создавал только эти файлы.

person Vignesh Pillay    schedule 11.02.2018

После добавления исполняемых файлов в CMakeLists.txt для каждого исходного файла необходимо перезагрузить файл, нажав кнопку Reload в правом верхнем углу, а затем установить run debug configuration на имя исходного файла, который он хочет запустить.

person Naimul Islam    schedule 22.07.2020