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?
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.
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.
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.