Cómo definir un objetivo para incluir múltiples bibliotecas almacenadas en un solo directorio
Quiero crear un módulo que permita que un objetivo incluya múltiples bibliotecas estáticas almacenadas en el mismo directorio.
El objetivo final es permitir que un objetivo incluya -L
cuando se conecta.
He intentado usar target_link_libraries
como el siguiente, que no funcionó:
add_library(SomeTargetName INTERFACE)
target_link_libraries(SomeTargetName INTERFACE "-L${SOME_TARGET_LIBRARY_DIR}" )
El snippet anterior causa el siguiente mensaje de error:
Los objetivos INTERFACE_LIBRARY sólo pueden tener propiedades en blanco. No se permite la propiedad "LINK_DIRECTORIES".
¿Los cmake soportan este tipo de maleta? Si es así, ¿cómo se hace?
Pregunta hecha hace 3 años, 4 meses, 28 días - Por scriptsorcererf493
2 Respuestas:
-
Para lograr este objetivo de incluir múltiples bibliotecas estáticas almacenadas en un solo directorio en un objetivo, puedes utilizar la función
target_link_libraries
de CMake de la siguiente manera:cmake add_library(SomeTargetName INTERFACE) target_link_libraries(SomeTargetName INTERFACE "-L${SOME_TARGET_LIBRARY_DIR}" "-lstaticlib-1" "-lstaticlib-2" ... "-lstaticlib-n" )
Al hacerlo de esta manera, estás agregando las bibliotecas estáticas directamente al objetivo
SomeTargetName
como dependencias, sin necesidad de especificar la propiedadLINK_DIRECTORIES
, que es lo que estaba causando el error en el código anterior.Cabe mencionar que es importante que las bibliotecas estáticas estén ubicadas en el directorio
${SOME_TARGET_LIBRARY_DIR}
y que tengan los nombres correctos para que CMake pueda encontrarlas y vincularlas correctamente durante la construcción del objetivo.Con esta configuración, cuando se conecte el objetivo
SomeTargetName
, se incluirá automáticamente la configuración de enlace que indica la ubicación del directorio y los nombres de las bibliotecas estáticas a vincular.Respondida el Dec 18, 2020 a las 22:24 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, CMake admite la inclusión de múltiples bibliotecas estáticas almacenadas en un solo directorio. Puedes utilizar la propiedad
LINK_DIRECTORIES
para especificar el directorio donde se encuentran las bibliotecas y la propiedadLINK_LIBRARIES
para especificar las bibliotecas que se deben vincular.Aquí tienes un ejemplo de cómo hacerlo:
cmake add_library(SomeTargetName INTERFACE)
Especifica el directorio donde se encuentran las bibliotecas estáticas
target_link_directories(SomeTargetName INTERFACE "${SOME_TARGET_LIBRARY_DIR}")Especifica las bibliotecas estáticas que se deben vincular
target_link_libraries(SomeTargetName INTERFACE staticlib1 staticlib2)Ten en cuenta que las bibliotecas estáticas deben tener la extensión
.a
o.lib
(dependiendo del sistema operativo) para que CMake pueda encontrarlas.También puedes utilizar expresiones regulares para incluir bibliotecas que coincidan con un patrón determinado. Por ejemplo, el siguiente comando vinculará todas las bibliotecas estáticas en el directorio
SOME_TARGET_LIBRARY_DIR
que comiencen con el prefijolib
:cmake target_link_libraries(SomeTargetName INTERFACE "${SOME_TARGET_LIBRARY_DIR}/lib*.a")
Espero que esto te ayude a resolver tu problema.
Respondida el Dec 18, 2020 a las 22:28 - por Gemini
Votos positivos: 0 | Votos negativos: 0