web-dev-qa-db-fra.com

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

Je suis actuellement en train de relever certains défis du Projet Euler en C en utilisant l’EDI JetBrains CLion. Lorsque j’ai achevé ces opérations sous Python et Java (sous PyCharm et IntelliJ, respectivement), j’ai toujours été en mesure de créer un projet unique appelé "ProjectEuler" et d’ajouter un nombre quelconque de fichiers source que je pouvais exécuter indépendamment. Cependant, il semble que la même chose ne soit pas possible dans CLion. Chacun des fichiers source que j'utilise pour résoudre un problème contient une fonction main () et CMake en est mécontent chaque fois que j'essaie de compiler ("plusieurs définitions de" main "").

Existe-t-il un moyen de configurer CLion pour ne compiler et exécuter qu'un seul fichier source dans un projet à la fois sans avoir à réécrire mon CMakeLists.txt ou créer un nouveau projet pour chaque problème à chaque fois? 

Je suis conscient que C est compilé et n'est pas interprété comme Java ou Python, mais je pourrais même compiler manuellement chaque fichier source. Y at-il un moyen de configurer CLion pour faire la même chose? Si c'est le cas, comment?

24
nidorion

Vous pouvez définir plusieurs exécutables dans le fichier CMakeLists.txt pour chaque problème.

au lieu de 

add_executable(projecteuler ${SOURCE_FILES})

vous pourriez définir

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

Ensuite, vous obtenez pour chaque exécutable (problème1, problème2, etc.) une configuration d'exécution que vous pouvez exécuter indépendamment. Dans ce cas, vous n'aurez pas à réécrire à chaque fois, mais vous ajouterez simplement le nouveau fichier source à un nouvel exécutable.

30
ipa

Vous pouvez utiliser

cmake_minimum_required(VERSION 2.8.4)

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

puis dans chaque répertoire, créez un autre fichier CMakeLists.txt comme celui-ci:

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 à votre compilation. Mais gardez à l'esprit que cette "astuce" n'est pas fortement encouragée. 

Cela ajoutera automatiquement les configurations de construction à CLion.

3
Waxo

Même si je faisais face au même problème, éditer un fichier CMake et ajouter un fichier exécutable à chaque fois est une tâche fastidieuse. Alors j'ai trouvé une solution à cela,

Il existe un plugin qui le fait de manière transparente pour vous.

Ajoutez simplement ce plugin à votre CLion et au fichier que vous voulez créer est exécutable, cliquez dessus avec le bouton droit de la souris et ajoutez-le en tant que fichier exécutable

Il éditera automatiquement votre fichier CMake.

Lien:

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

0
Shantanu Dwivedi

Vous pouvez ajouter ces lignes à votre fichier 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})

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

0
Vignesh Pillay