Nuevo en la versión 3.13.
Agrega directorios de enlace a un objetivo.
target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ...])
Especifica las rutas en las que el enlazador debe buscar bibliotecas al enlazar un objetivo dado. Cada elemento puede ser una ruta absoluta o relativa, siendo esta última interpretada como relativa al directorio de origen actual. Estos elementos se añadirán a la orden de enlace.
El llamado <target>
debe haber sido creado por una orden comoadd_executable()
o add_library()
y no debe ser un objetivoALIAS.
Las palabras clave INTERFACE
, PUBLIC
y PRIVATE
son necesarias para especificar el alcance de los elementos que les siguen. Los elementos PRIVATE
y PUBLIC
rellenarán la propiedad LINK_DIRECTORIES
de <target>
. Los elementos PUBLIC
y INTERFACE
rellenarán la propiedad INTERFACE_LINK_DIRECTORIES
de <target>
(los objetivos IMPORTED sólo admiten elementos INTERFACE
). Cada elemento especifica un directorio de enlace y se convertirá en una ruta absoluta si es necesario antes de añadirlo a la propiedad correspondiente. Las llamadas repetidas para el mismo <target>
añaden elementos en el orden en que se llamen.
Si se especifica BEFORE
, el contenido se añadirá a la propiedad correspondiente en lugar de añadirse.
Los argumentos para target_link_directories
pueden utilizar “expresiones generadoras” con la sintaxis $<...>
. Consulte el manual cmake-generator-expressions(7)
para conocer las expresiones disponibles. Consulte el manual cmake-buildsystem(7)
para obtener más información sobre la definición de las propiedades del sistema de compilación.
Nota
Este comando rara vez es necesario y debe evitarse cuando hay otras opciones. Prefiera pasar rutas absolutas completas a las bibliotecas siempre que sea posible, ya que esto asegura que siempre se enlazará la biblioteca correcta.El comando find_library()
proporciona la ruta completa, que generalmente se puede utilizar directamente en las llamadas a target_link_libraries()
.Las situaciones en las que se puede necesitar una ruta de búsqueda de la biblioteca incluyen:
-
Los generadores de proyectos como Xcode en los que el usuario puede cambiar la arquitectura de destino en el momento de la construcción, pero no se puede utilizar una ruta completa a una biblioteca porque sólo proporciona una arquitectura (es decir.Es decir, no es un binario universal).
-
Las bibliotecas pueden tener otras dependencias de bibliotecas privadas que esperan ser encontradas a través de mecanismos
RPATH
, pero algunos enlazadores no son capaces de decodificar completamente esas rutas (por ejemplo, debido a la presencia de cosas como$ORIGIN
).