Je souhaite que CMake trouve trois bibliothèques statiques dans le même dossier. Ceci est la partie de mon CMakeLists.txt je me bats avec:La bibliothèque find_library de CMake() ne localise pas les bibliothèques.
# Dependencies' directories
set(OGRE3D_DIR "D:/Data/Libs/ogre3D-1.10")
# Required libraries
find_library(OGREMAIN_LIB
NAMES OgreMain OgreMain_d
HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")
find_library(OGREOVERLAY_LIB
NAMES OgreOverlay OgreOverlay_d
HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")
find_library(OIS_LIB
NAMES OIS OIS_d
HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")
# Target
add_executable(Test Main.cpp)
# Library linking
target_link_libraries(Test
${OGREMAIN_LIB}
${OGREOVERLAY_LIB}
${OIS_LIB})
Pour une raison quelconque, sont tous à NOTFOUND, mais les trois variables OGREMAIN_LIB
, OGREOVERLAY_LIB
et OIS_LIB
si j'essaie de les imprimer je trouve qu'ils est réglé sur le chemin attendu (même celui qui est correct entre le suffixe et le non-suffixe est choisi). Toutes les bibliothèques sont évidemment dans le chemin prévu.
Qu'est-ce que je fais mal ici?
Les résultats des appels 'find_library()' sont mis en cache, mais ils devraient essayer de les retrouver s'ils ne sont pas trouvés. Donc, lors de vos tests, avez-vous toujours démarré à partir d'un répertoire de sortie binaire vide? Pendant la configuration de votre projet - tout en testant votre 'CMakeLists.txt' - je recommanderais d'ajouter par exemple. 'unset (OGREMAIN_LIB CACHE)' avant les appels 'find_library()' pour forcer CMake à rechercher la bibliothèque à chaque fois. – Florian
'... les trois variables OGREMAIN_LIB, OGREOVERLAY_LIB et OIS_LIB sont toutes définies sur NOTFOUND, mais si j'essaie de les imprimer, je trouve qu'elles sont définies ...' - Donc, sont ces variables '-NOTFOUND' ou définies sur chemin? Comment les vérifiez-vous (via 'message()', dans le cache CMake, etc.)? – Tsyvarev
Pour ce qui concerne l'effacement du cache, je le fais via l'interface de CLion juste avant de recharger le projet (qui appelle CMake), mais ils finissent par -NOTFOUND dans le cache de CMake (également inspecté via l'interface graphique de CLion). Quant à l'impression de leurs noms, j'utilise le chemin message (STATUS): $ {OGREMAIN_LIB} ")' (etc.) après la dernière instruction 'find_library()', et le chemin attendu est imprimé. –
pr0gma