2011-05-30 15 views
10

Actualmente tengo un proyecto que vincula a dos bibliotecas de terceros. Estas bibliotecas deben ser compiladas por ellos mismos y luego vinculadas al proyecto. Uno es taglib y el otro es zlib. Me di cuenta de que cuando utilizas el programa Cmake-gui en el directorio taglib, debes especificar dónde se ha creado e instalado zlib.Necesito ayuda para intentar que Cmake encuentre bibliotecas de terceros

Mi objetivo es conseguir que CMake haga algo similar para mi programa. Dado que el lugar donde se almacenan estas bibliotecas será inconsistente, ¿cómo puedo solicitar al usuario que proporcione la ruta de las bibliotecas necesarias?

Espero que esto sea lo suficientemente específico.

Respuesta

19

En el caso de ZLib, se proporciona un FindZLIB.cmake con CMake y puede "simplemente" poner una llamada find_package en sus cmakelists. Si es necesario, puede hacer algunas modificaciones en findzlib.cmake para satisfacer sus necesidades. P.ej. agregando ZLIB_DIR como una sugerencia adicional al buscar la biblioteca. Este ZLIB_DIR puede ser configurado por el usuario.

Suponiendo que su biblioteca/ejecutable se llama YourProject, puede usarlo de la siguiente manera.

find_package(ZLIB REQUIRED) 
if (ZLIB_FOUND) 
    include_directories(${ZLIB_INCLUDE_DIRS}) 
    target_link_libraries(YourProject ${ZLIB_LIBRARIES}) 
endif(ZLIB_FOUND) 

debería utilizar el mismo enfoque para TagLib, sino que debe escribir su propia FindTagLib.cmake (o buscar una buena).

La parte importante aquí es que le da al usuario la opción de establecer una variable TagLib_DIR, que utiliza para buscar TagLib y que usa FindPackageHandleStandardArgs para informar de éxito o error.

+0

Así que todo lo que hacer es poner este FindTaglib.cmake en el mismo directorio que el CMakeLists.txt? –

+0

Busca FindTagLib.cmake en CMAKE_MODULE_PATH. No estoy seguro de si el directorio principal con CMakeLists.txt ya está allí. Si no, puede agregarlo: set (CMAKE_MODULE_PATH $ {CMAKE_CURRENT_SOURCE_DIR}) –

1

No estoy seguro de modo interactivo, pero siempre se puede utilizar variables de entorno o la siguiente:

cmake -D<VAR_NAME>:STRING=<path to custom zlib> . 

para proporcionar cmake con zlib costumbre o ubicación taglib.

No se olvide de actualizar FindZLIB.cmake para manejar estas variables en FIND_PATH y FIND_LIBRARY

Cuestiones relacionadas