Bonjour,
Je me suis replongé dans C++ récemment. Afin d'améliorer mes projets, j'ai commencé à apprendre CMake. Mon objectif du jour est de parvenir à construire un anciens projet à l'aide de l'outil CMake. Le projet en question est un simple jeu de rôle tiré d'une formation openclassroom.
Pour la structure de mon projet, j'ai opté pour les chemins suivants :
Le problème que je rencontre est de bien lier les chemins au niveau de CMake. Pour le moment, j'utilise un fichier CMake à chaque étape du chemin et je construis le projet dans un autre dossier dédié \jdr\build\, c'est-à-dire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 --jdr : main.cpp --extensions --headers : *.hpp --sources : *.cpp
L'erreur que je rencontre se situe au niveau de main.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 --jdr : main.cpp CMakeLists.txt --build --extensions : CMakeLists.txt --headers : *.hpp --sources : *.cpp CMakeLists.txt
J'ai essayé deux ou trois trucs un peu à l'aveuglette et consulté quelques pages stackoverflow mais je dois admettre ne pas comprendre les solutions proposées ou ne pas bien les appliquer à mon projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 arme.cpp Arme.vcxproj -> ...\jdr\build\extensions\sources\Debug\Arme.lib main.cpp ...\jdr\main.cpp(1,10): fatal error C1083: Impossible d'ouvrir le fichier include : 'arme.hpp' : No such file or directory [...\jdr\build\JDR.vcxproj] personnage.cpp Personnage.vcxproj -> ...\jdr\build\extensions\sources\Debug\Personnage.lib mage.cpp Mage.vcxproj -> ...\jdr\build\extensions\sources\Debug\Mage.lib
Afin de vous fournir toutes les clefs nécessaire pour m'aider, je vous mets le contenu des différences fichiers CMake. D'abord le fichier se trouvant ...\jdr\ :
Code cmake : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 # CMake version requirements cmake_minimum_required(VERSION 3.10) # Project name project(JDR VERSION 0.1) # C++ version add_library(cpp_std INTERFACE) target_compile_features(cpp_std INTERFACE cxx_std_17) # Subdirectories add_subdirectory(extensions) # Executable add_executable(JDR main.cpp) # Links C++ version to project target_link_libraries(JDR PUBLIC extensions cpp_std) # Links binary dir to project target_include_directories(JDR PUBLIC "${PROJECT_BINARY_DIR}")
Ensuite, celui présent dans ...\jdr\extensions\ :
Code cmake : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 # Add subdirectories to project include_directories(headers) add_subdirectory(sources)
Enfin, celui présent dans ...\jdr\extensions\sources\ :
Code cmake : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 # Add libraries add_library(Arme arme.cpp) add_library(Mage mage.cpp) add_library(Personnage personnage.cpp) # Link libraries target_link_libraries(Mage PRIVATE Arme Personnage) target_link_libraries(Personnage PRIVATE Arme) target_link_libraries(Arme PUBLIC cpp_std) target_link_libraries(Mage PUBLIC cpp_std) target_link_libraries(Personnage PUBLIC cpp_std)
Etant donné que je débute avec CMake et que mon niveau en C++ n'est pas beaucoup plus élevé, tout commentaire digressif portant sur les bonnes pratiques ou autre sont également les bienvenus.
Si vous avez besoin d'informations supplémentaires comme le contenu des fichiers sources et headers, faites le moi savoir![]()
Partager