2010-04-08 4 views
10

Quelle est la meilleure méthode pour inclure une bibliothèque prédéfinie dans un projet cmake? Je veux inclure FreeType dans le projet sur lequel je travaille et la structure du fichier est comme ceci:Ajouter des bibliothèques compilées et inclure des fichiers dans un projet CMake?

  • Construire
    • MacOS
      • Marque/
      • XCode/
    • Windows
      • VisualStudio/
  • Source
    • libs
      • MacOS
        • libfreetype
      • de Windows
        • freetype.dll
    • comprend
      • freetype/(divers fichiers d'en-tête qui sont inclus automatiquement par ftbuild.h)
      • de ftbuild.h (ce que est inclus dans le code de ma compréhension.)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

La bibliothèque est déjà compilé. MyProject est le nom du projet en cours.

Merci! Mike

Répondre

9

Les versions récentes ont déjà un module pour trouver FreeType. Voici le genre de chose que je l'ai fait dans le passé:

INCLUDE(FindFreetype) 
IF(NOT FREETYPE_FOUND) 
    FIND_LIBRARY(FREETYPE_LIBRARIES NAMES libfreetype freetype.dll PATHS "./libs/MacOS" "./libs/Windows" DOC "Freetype library") 
    FIND_PATH(FREETYPE_INCLUDE_DIRS ftbuild.h "./includes" DOC "Freetype includes") 
ENDIF(NOT FREETYPE_FOUND) 
INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) 
TARGET_LINK_LIBRARIES(MyProject ${FREETYPE_LIBRARIES}) 

Vous aurez besoin de changer les chemins d'être par rapport à votre CMakeLists.txt.

Cet extrait appelle d'abord le module FindFreetype pour vérifier les emplacements système standard.S'il ne trouve pas la bibliothèque, cela revient à vérifier les répertoires relatifs au script CMakeLists.txt. Si échoue toujours, vous pouvez toujours définir ou remplacer les emplacements via l'interface utilisateur CMake habituelle. Dans tous les cas, il essaie d'ajouter quelque chose à la liste des includes et des bibliothèques à lier. Il suffit d'utiliser target_link_libraries avec le chemin d'accès complet à la bibliothèque préconfigurée.

6

Donc, quelque chose comme:

# In the file Source/MyProject/CMakeLists.txt 
add_executable(my_exe main.cpp foo.cpp foo.h) 
if(WIN32) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/Windows/freetype.lib) 
endif() 
if(APPLE) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/MacOS/libfreetype.a) 
endif() 
Questions connexes