Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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