J'essaie de démarrer un projet en utilisant CMake (3.5.2). Pour mon projet, je veux utiliser SDL2. C'est la hiérarchie des dossiers jusqu'à présent.Importer la bibliothèque statique tierce (SDL2) dans CMake
PROJECT
├── Applications
├── External
│ └── SDL2
├── Games
├── Libraries
│ └── Rendering
└── Tests
└── Testen
La bibliothèque de rendu je travaille a une dépendance à l'égard SDL2 et Testen a une dépendance à l'égard SDL2. J'ai construit SDL2 en tant que bibliothèque statique pour chaque plate-forme et avant que j'essaye d'importer SDL2 à mon projet de CMake, j'avais une application de test basée par console dans un état fonctionnant. Après avoir tenté d'ajouter, je me suis perplexe sur ...
:-1: error: No rule to make target /**FULL_PATH_TO_PROJECT_DIR**/External/SDL2/SDL2-2.0.5/Xcode/SDL/Build/libSDL2.a, needed by `Tests/Testen/Testen.app/Contents/MacOS/Testen'. Stop.
Voici la liste CMake pour SDL2
SET (SDL2_NAME "External::SDL2")
SET (SDL2_LIBRARY "***ABSOLUTE_PATH_TO_LIBRARY***")
SET (SDL2_LIBRARY_DIR "***ABSOLUTE_PATH_TO_LIBRARY_DIR***")
SET (SDL2_INCLUDE_DIR "***ABSOLUTE_PATH_TO_SDL2_INCLUDES***")
LINK_DIRECTORIES("${SDL2_LIBRARY_DIR}")
ADD_LIBRARY (
${SDL2_NAME}
STATIC
IMPORTED
GLOBAL
)
SET_TARGET_PROPERTIES (
${SDL2_NAME}
PROPERTIES
IMPORTED_LOCATION ${SDL2_LIBRARY}
LINK_DIRECTORIES ${SDL2_LIBRARY_DIR}
INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}
)
Voici la liste CMake pour la bibliothèque wrapper rendu
SET (LIBRARY_NAME Rendering)
SET (
HEADERS
Header1.h
Header2.h
Header3.h
Header4.h
)
SET (
SOURCE
Source1.cpp
Source2.cpp
Source3.cpp
Source4.cpp
)
SET (
LIB_DEPENDENCIES
SomeOtherLibraryWrittenByMe
)
LINK_DIRECTORIES("${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}")
ADD_LIBRARY (
${LIBRARY_NAME}
${SOURCE}
${HEADERS}
)
ADD_DEPENDENCIES (
${LIBRARY_NAME}
${LIB_DEPENDENCIES}
)
TARGET_LINK_LIBRARIES (
${LIBRARY_NAME}
${LIB_DEPENDENCIES}
External::SDL2
)
Voici la liste CMake pour Testen (mon application de test)
SET (APP_NAME Testen)
SET (APP_HEADERS ***SAME_STYLE_AS_RENDERING***)
SET (APP_SOURCE ***SAME_STYLE_AS_RENDERING***)
LINK_DIRECTORIES("${***ABSOLUTE_PATH_TO_SDL2_LIBRARY_DIR***}")
# Here we put together our executable
ADD_EXECUTABLE (
${APP_NAME}
MACOSX_BUNDLE # Because I'm on a mac right now
${APP_HEADERS}
${APP_SOURCE}
)
ADD_DEPENDENCIES (
${APP_NAME}
Rendering
)
TARGET_LINK_LIBRARIES (
${APP_NAME}
Rendering
)
Le but de mon projet est de mieux comprendre les différents aspects de la programmation. Cela dit, j'évite activement d'utiliser des scripts auxiliaires tels que FindSDL2.cmake et d'autres modules similaires. Peut-être que c'est peut-être l'outil dont j'ai besoin pour résoudre mon problème, mais j'aimerais savoir exactement ce qu'il fait si jamais je tente d'ajouter quelque chose à mon projet qui n'a pas de script Find.cmake, je ne suis pas bloqué.
Le chemin dans le message d'erreur est celui que vous attribuez à * IMPORTED_LOCATION * pour la bibliothèque SDL2. Si vous voulez lier votre bibliothèque avec SDL2 et supprimer SDL2, faites ce lien comme * PRIVATE *, donc il ne sera pas propagé à l'exécutable. – Tsyvarev
@Tsyvarev J'ai changé TARGET_LINK_LIBRARIES dans la bibliothèque Rendering pour lier SDL2 en privé, mais tout ce qui semblait être de déplacer l'erreur de Testen vers Rendering. – UebelAndre