Можно ли настроить CLION для компиляции исходных файлов в проекте независимо?
В настоящее время я выполняю некоторые задачи Project Euler в C с помощью JetBrains CLion IDE. Когда я закончил их на Python и Java (соответственно в PyCharm и IntelliJ), я всегда мог создать один проект под названием "ProjectEuler" и добавить любое количество исходных файлов, которые я мог бы выполнять независимо. Однако, похоже, в CLION это невозможно. Каждый из исходных файлов, которые я использую для решения проблемы, содержит функцию main(), и CMake недовольна этим каждый раз, когда я пытаюсь скомпилировать ( "множественное определение" main ").
Есть ли способ настроить CLion только для компиляции и выполнения одного исходного файла в проекте за один раз без необходимости переписывать мой CMakeLists.txt или каждый раз создавать новый проект для каждой проблемы?
Я знаю, что C скомпилирован и не интерпретируется как Java или Python, но я мог бы просто скомпилировать каждый отдельный исходный файл вручную. Есть ли способ настроить CLION на то же самое? Если да, то как?
Ответы
Ответ 1
Вы можете определить несколько исполняемых файлов в CMakeLists.txt для каждой проблемы.
вместо
add_executable(projecteuler ${SOURCE_FILES})
вы можете определить
add_executable(problem1 problem1.c)
add_executable(problem2 problem2.c)
Затем вы получаете для каждого исполняемого файла (problem1, problem2 и т.д.) конфигурацию запуска, которую вы можете запускать независимо. В этом случае вам не придется переписывать каждый раз, вместо этого вы просто добавляете новый исходный файл в новый исполняемый файл.
Ответ 2
Вы можете использовать
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.
Ответ 3
Вы можете добавить эти строки в свой 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)
чтобы он file(GLOB_RECURSE APP_SOURCES path/to/*.c)
только эти файлы.
Ответ 4
Даже я столкнулся с той же проблемой, это утомительная работа по редактированию файла CMake и добавлению исполняемого файла каждый раз. Так что я нашел решение этого,
Есть плагин, который делает это без проблем для вас.
Просто добавьте этот плагин в ваш CLion, и тот файл, который вы хотите сделать, является исполняемым, щелкните правой кнопкой мыши и добавьте его как Исполняемый,
Он автоматически отредактирует ваш файл CMake.
Ссылка на сайт:
https://plugins.jetbrains.com/plugin/8352-cc--single-file-execution