Est-il possible de configurer CLion pour compiler des fichiers sources dans un projet indépendamment?

je suis actuellement en train de faire un Projet Euler défis en C en utilisant les JetBrains CLion IDE. Lorsque je les ai complétés en Python et Java (respectivement en PyCharm et IntelliJ), j'ai toujours été capable de créer un seul projet nommé "ProjectEuler" et d'ajouter n'importe quel nombre de fichiers source que je pouvais exécuter indépendamment. Cependant, il semble que la même chose n'est pas possible à CLion. Chaque fichier source que j'utilise pour résoudre un problème contient une fonction main (), et CMake n'est pas satisfait chaque fois que j'essaie pour compiler ("définition multiple de 'main'").

y a-t-il un moyen de configurer CLion pour compiler et exécuter un seul fichier source dans un projet à la fois sans avoir à réécrire Mes listes Cmakel.txt ou créer un nouveau projet pour chaque problème à chaque fois?

je suis conscient que C est compilé et pas interprété comme Java ou Python, mais je pourrais peut-être simplement compiler chaque fichier source manuellement. Y a-t-il un moyen de configurer CLion pour faire la même chose? Si oui, comment?

22
demandé sur nidorion 2015-05-14 17:02:25

3 réponses

vous pouvez définir plusieurs exécutables dans les listes Cmakel.txt pour chaque problème.

au lieu de

add_executable(projecteuler ${SOURCE_FILES})

vous pouvez définir

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

puis vous obtenez pour chaque exécutable (problem1,problem2 etc.) une configuration d'exécution, que vous pouvez exécuter indépendamment. Dans ce cas, vous n'aurez pas à réécrire à chaque fois, vous n'aurez qu'à ajouter le nouveau fichier source à un nouvel exécutable.

28
répondu ipa 2015-05-16 09:12:43

Vous pouvez utiliser

cmake_minimum_required(VERSION 2.8.4)

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

ensuite, dans chaque répertoire, créez une autre liste Cmakel.txt comme ceci :

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

Vous pouvez utiliser file(GLOB SOURCE_FILES *.cpp) si vous souhaitez ajouter automatiquement des fichiers dans votre compilation. Mais gardez à l'esprit que ce "truc" est fortement déconseillée.

cela ajoutera automatiquement des configurations de compilation à CLion.

3
répondu Waxo 2015-05-19 07:07:21

vous pouvez ajouter ces lignes à vos listes de Cmakel.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})

Vous devrez recharger cmake projet (Outils -> Cmake) chaque fois que vous ajoutez ou supprimez des fichiers de votre projet. Le temps de compilation augmentera également si vous ajoutez plus de fichiers. Vous pouvez créer plus de répertoires et de sous-répertoires et utiliser file(GLOB_RECURSE APP_SOURCES path/to/*.c) donc il ne construira que ces fichiers.

0
répondu Vignesh Pillay 2018-02-11 06:43:23