J'essaie de mettre en place un projet de test ressemblant à mon propre projet juste pour que les choses fonctionnent en premier et il ressemble à ceci:
/MainProject/inc/main.h
/MainProject/src/main.cpp
/LibProject/inc/test.h
/LibProject/src/test.cpp
J'ai trouvé des tutoriels, mais je ne peux pas savoir comment configurer cela lorsque j'ai le dossier inc et src? À quoi ressembleraient les fichiers CMakeLists.txt? Aurais-je un dans /, un dans chacun des dossiers de projet? Il semble que je n'ai pas besoin d'en avoir un dans les dossiers inc et src?
Tu as besoin d'un CMakeLists.txt
pour chaque sous-répertoire source. Votre structure devrait ressembler à ceci:
root
|-MainProject
| |-inc
| | '-main.h
| |-src
| | |-main.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt
|-LibProject
| |-inc
| | '-test.h
| |-src
| | |-test.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt
'-CMakeLists.txt
Contenu de root/CMakeLists.txt
:
project(MyProject)
add_subdirectory(MainProject)
add_subdirectory(LibProject)
Contenu de LibProject/CMakeLists.txt
et MainProject/CMakeLists.txt
:
add_subdirectory(src)
Contenu de LibProject/src/CMakeLists.txt
:
# Notice name prefix of this variable, set by CMake according
# to value given with "project()" in the root CMakeLists.txt.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
add_library(LibProject test.cpp)
Contenu de MainProject/src/CMakeLists.txt
:
include_directories(${MyProject_SOURCE_DIR}/MainProject/inc)
# I assume you want to use LibProject as a library in MainProject.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
link_directories(${MyProject_SOURCE_DIR}/LibProject/src)
add_executable(MainProject main.cpp)
target_link_libraries(MainProject LibProject)
Ensuite, configurez et construisez avec:
$ cd root
$ mkdir build
$ cd build
$ cmake ..
$ make
Vous pourriez le faire comme suivre.
CMakeLists.txt dans votre répertoire MainProject:
project(MainProject)
add_subdirectory(LibProject/src)
add_subdirectory(MainProject/src)
CMakeLists.txt dans votre répertoire LibProject/src:
include_directories(${PROJECT_SOURCE_DIR}/LibProject/inc/)
add_library(LibProject test.cpp)
CMakeLists.txt dans votre répertoire MainProject/src:
include_directories(${PROJECT_SOURCE_DIR}/MainProject/inc/)
add_executable(MainProject main.cpp)
target_link_libraries(MainProject LibProject)
Dans mon cas, je voulais le faire avec un CMakeList unique . Et ça a marché pour moi. J'ajoute ma solution au cas où elle servirait à n'importe qui.
Voici ce que j'ai fait dans mon cas:
My structure:
Project
|CMakeLists.txt
|-src
| |*.cpp
| |*.c
|-include
| |*.hpp
| |*.h
Mes CMakeLists.txt se composent de parties principales:
include_directories(
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
)
^ Permet aux fichiers .cpp d'ajouter des en-têtes dans le dossier include.
file(GLOB all_SRCS
"${PROJECT_SOURCE_DIR}/include/*.h"
"${PROJECT_SOURCE_DIR}/include/*.hpp"
"${PROJECT_SOURCE_DIR}/src/*.cpp"
"${PROJECT_SOURCE_DIR}/src/*.c"
)
^ Ajoutez simplement ce qui se trouve dans ces dossiers.
PS: si vous voulez voir l'intégralité de CMakeLists.txt, allez sur le lien du projet NEGU93/ForbiddenDesert .