2010-04-08 2 views
10

Qual è il metodo migliore per includere una libreria precostruita in un progetto cmake? Voglio includere FreeType nel progetto cui sto lavorando e la struttura del file è come questo:Aggiunta di librerie compilate e inclusione di file in un progetto CMake?

  • Corporatura
    • MacOS
      • fabbricante/
      • XCode/
    • Windows
      • VisualStudio/
  • Fonte
    • librerie
      • MacOS
        • libfreetype
      • di Windows
        • freetype.dll
    • include
      • /(Vari file di intestazione che sono inclusi automaticamente ftbuild.h) FreeType
      • ftbuild.h (questo è ciò che è incluso nel codice dalla mia comprensione.)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

La biblioteca è già compilato. MyProject è il nome del progetto corrente.

Grazie! Mike

risposta

9

Le versioni recenti dispongono già di un modulo per la ricerca di FreeType. Ecco il genere di cose che ho fatto in passato:

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

Avrete bisogno di modificare i percorsi di essere relativo alla vostra CMakeLists.txt.

Questo snippet richiama per primo il modulo FindFreetype per controllare le posizioni di sistema standard.Se non riesce a trovare la libreria lì, allora questo torna a controllare le directory relative allo script CMakeLists.txt. Se che non riesce ancora, è comunque possibile impostare o ignorare le posizioni tramite la normale interfaccia utente di CMake. In ogni caso, tenta di aggiungere qualcosa all'elenco di include e alle librerie da collegare.

6

Basta usare target_link_libraries con il percorso completo della lib prebuilt.

Quindi, qualcosa di simile:

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