2010-04-08 4 views
10

Was ist die beste Methode, um eine vordefinierte Bibliothek in ein cmake-Projekt einzubinden? Ich möchte Freetype in das Projekt einzubeziehen ich arbeite und die Strukturdatei ist wie folgt:Kompilierte Bibliotheken hinzufügen und Dateien zu einem CMake-Projekt hinzufügen?

  • Bauen
    • MacOS
      • Marke/
      • XCode/
    • Windows
      • Visual Studio/
  • Quelle
    • Libs
      • MacOS
        • libfreetype
      • Windows-
        • freetype.dll
    • umfasst
      • freetype/(Verschiedene Header-Dateien, die automatisch von ftbuild.h enthalten sind)
      • ftbuild.h (das ist, was ist im Code von meinem Verständnis enthalten.)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

Die Bibliothek bereits kompiliert wird. MyProject ist der Name des aktuellen Projekts.

Danke! Mike

Antwort

9

Aktuelle Versionen haben bereits ein Modul zum Finden von FreeType. Hier ist die Art von Sache, die ich in der Vergangenheit getan haben:

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}) 

Sie benötigen, um die Pfade zu ändern, um Ihre CMakeLists.txt sein relativ.

Dieses Snippet ruft zuerst das FindFreetype-Modul auf, um die Standardsystempositionen einzutragen.Wenn die Bibliothek dort nicht gefunden wird, wird auf die Überprüfung der Verzeichnisse in Bezug auf das Script CMakeLists.txt zurückgegriffen. Wenn die immer noch fehlschlägt, können Sie die Standorte weiterhin über die übliche CMake-Benutzeroberfläche festlegen oder überschreiben. In jedem Fall wird versucht, der Liste der zu verknüpfenden Includes und Bibliotheken etwas hinzuzufügen.

6

Verwenden Sie einfach target_link_libraries mit dem vollständigen Pfad zur vorgefertigten lib.

Also, so etwas wie:

# 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()