2010-04-08 12 views
10

¿Cuál es el mejor método para incluir una biblioteca precompilada en un proyecto de cmake? Quiero incluir FreeType en el proyecto que estoy trabajando y la estructura de archivos es la siguiente:¿Agregar bibliotecas compiladas e incluir archivos en un proyecto de CMake?

  • Construir
    • MacOS
      • Marca/
      • XCode/
    • Windows
      • VisualStudio/
  • Fuente
    • libs
      • MacOS
        • libfreetype
      • de Windows
        • freetype.dll
    • incluye
      • (Varios archivos de cabecera que se incluyen automáticamente por ftbuild.h) freetype/
      • ftbuild.h (esto es lo está incluido en el código de mi comprensión.)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

La biblioteca ya se compila. MyProject es el nombre del proyecto actual.

Gracias! Mike

Respuesta

9

Las versiones recientes ya tienen un módulo para encontrar FreeType. Aquí está el tipo de cosas que he hecho en el pasado:

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

Tendrá que cambiar las rutas que es relativo a su CMakeLists.txt.

Este fragmento primero invoca el módulo FindFreetype para verificar en las ubicaciones de sistema estándar.Si no encuentra la biblioteca allí, esto vuelve a consultar los directorios relativos a su secuencia de comandos CMakeLists.txt. Si que aún falla, aún puede establecer o anular las ubicaciones a través de la interfaz de usuario CMake habitual. En cualquier caso, intenta agregar algo a la lista de inclusiones y bibliotecas para vincular.

6

Simplemente use target_link_libraries con la ruta completa a la lib preconstruida.

Por lo tanto, algo así como:

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