Estoy tratando de usar ExternalProject_add() para descargar/instalar dependencias. Se instala bien, pero no puedo encontrar la forma de vincular las bibliotecas una vez que se hayan descargado.CMake - enlace a la biblioteca descargada de ExternalProject_add()
Deseo llamar a target_link_libraries() en la biblioteca que acaba de descargar, pero la ruta a la biblioteca variará según el sistema.
Si esto fuera una dependencia del sistema, podría simplemente llamar a find_package() - pero los paquetes no se instalaron en la ruta de búsqueda predeterminada. No creo que pueda especificar una ruta de búsqueda para find_package en el modo de módulo.
He aquí un fragmento de mi CMakeLists.txt que no funciona:
ExternalProject_Add(
protobuf
URL http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
PREFIX ${MYPROJ_SOURCE_DIR}/dependencies
)
find_package(protobuf REQUIRED)
set(LIBS ${LIBS} ${PROTOBUF_LIBRARIES})
target_link_libraries (mybinary ${LIBS})
Gracias, eso es realmente útil. También para no causar confusión, protobuf no tiene ubicaciones de bibliotecas variables, pero R sí. –
cmake proporciona las variables de prefijo y sufijo para su plataforma: '" $ {install_dir}/lib/$ {CMAKE_SHARED_MODULE_PREFIX} protobufLib1 $ {CMAKE_SHARED_LIBRARY_SUFFIX} "' –
Mientras esto funciona, creo que es horrible. ¿De qué sirve usar cmake si tengo que escribir el código condicional de la plataforma? Además, esperaría que ExternalProject proporcionara una manera simple de importar los objetivos construidos, ¿por qué querría construir un proyecto externo si no puedo importarlos fácilmente después? ¿Cuál es el punto de? ¿Me estoy perdiendo de algo? – Jens