Link a target to given libraries.

target_link_libraries(<target> ]] <item>] ...)

Specifique bibliotecas ou bandeiras a usar ao ligar um determinado alvo. Em seguida denominado <target> deve ter sido criado no diretório atual por comando, como add_executable() ou add_library(). Os argumentos Theremaining especificam os nomes das bibliotecas ou flags. Chamadas repetidas para o mesmo <target> anexar itens na ordem chamada.

Se o nome de uma biblioteca corresponder ao de outro alvo na competência do projeto será automaticamente adicionado no sistema de compilação para garantir que a biblioteca que está sendo vinculada esteja atualizada antes dos links de destino. Nomes de itens iniciando com -, mas não -l ou -framework, são tratados com aslinker flags.

A debug, optimized, ou general a palavra-chave indica que a biblioteca imediatamente após deve ser usada apenas para a configuração de compilação correspondente. A palavra-chave debug corresponde à configuração Debug (ou às configurações nomeadas na propriedade globalDEBUG_CONFIGURATIONS, se estiver definida). A palavra-chaveoptimized corresponde a todas as outras configurações. A general palavra-chave corresponde a todas as configurações, e é puramente opcional (assumida se omitida). Uma granularidade maior pode ser atingida para regras de configuração porper-configuração através da criação e ligação a alvos de bibliotecasIMPORTED.

As dependências das bibliotecas são transitórias por padrão com esta assinatura.Quando este alvo é ligado a outro alvo, então as bibliotecas ligadas a este alvo também aparecerão na linha de ligação para o outro alvo. Esta “interface de link” transitiva é armazenada na propriedadeINTERFACE_LINK_LIBRARIESalvo e pode ser substituída pela configuração direta da propriedade. Quando CMP0022 não está definido paraNEW, a ligação transitiva é construída, mas pode ser substituída pela propriedadeLINK_INTERFACE_LIBRARIES. Chamadas para outras assinaturas deste comando podem definir a propriedade tornando qualquer biblioteca ligada exclusivamente por esta assinatura privada.

CMake também propagará os requisitos de uso de bibliotecas ligadas a alvos. Requisitos de uso de dependências afetcompilação de fontes em <target>.

Se um <item> é uma biblioteca em um framework Mac OX, o Headersdiretório do framework também será processado como requisito ausage. Isto tem o mesmo efeito de passar o diretório do framework como um diretório de inclusão.

target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <lib> ... ...])

The PUBLIC, PRIVATE and INTERFACE keywords can be used tospecify both the link dependencies and the link interface in one command.Libraries and targets following PUBLIC are linked to, and are madepart of the link interface. As bibliotecas e os alvos seguintes a PRIVATE estão ligados, mas não fazem parte da interface do link. As bibliotecas seguintes a INTERFACE são anexadas à interface de link e não são usadas para linkar <target>.

target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <lib>] ...)

O modo LINK_INTERFACE_LIBRARIES anexa as bibliotecas à propriedadeINTERFACE_LINK_LIBRARIES alvo em vez de usá-las para linkar. Se a política CMP0022 não for NEW, então este modo também anexa as bibliotecas à propriedade LINK_INTERFACE_LIBRARIES e equivalente a itsper-configuração.

Esta assinatura é apenas para compatibilidade. Prefira o INTERFACE modeinstead.

Bibliotecas especificadas como debug são envolvidas em uma expressão geradora que corresponde aos builds de debug. Se a política CMP0022 não for NEW, as bibliotecas também são anexadas à propriedadeLINK_INTERFACE_LIBRARIES_DEBUG (ou às propriedades correspondentes às configurações listadas na propriedade DEBUG_CONFIGURATIONS global se estiver definida). As bibliotecas especificadas como optimized são anexadas à propriedadeINTERFACE_LINK_LIBRARIES. Se a política CMP0022 não é NEW, elas também são anexadas à propriedadeLINK_INTERFACE_LIBRARIES. As bibliotecas especificadas comogeneral (ou sem qualquer palavra-chave) são tratadas como se fossem especificadas tanto paradebug como para optimized.

target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>] ... <lib>] ...])

Os modos LINK_PUBLIC e LINK_PRIVATE podem ser usados para especificar as dependências do link e a interface do link em um comando.

Esta assinatura é apenas para compatibilidade. Prefira as palavras-chave PUBLIC ou PRIVATE em vez disso.

As bibliotecas e os alvos seguintes LINK_PUBLIC estão ligados e são parte integrante do comando INTERFACE_LINK_LIBRARIES. Se a políticaCMP0022 não é NEW, elas também são feitas parte doLINK_INTERFACE_LIBRARIES. As bibliotecas e os alvos seguintesLINK_PRIVATE são ligados a, mas não fazem parte doINTERFACE_LINK_LIBRARIES (ou LINK_INTERFACE_LIBRARIES).

O gráfico de dependência da biblioteca é normalmente acíclico (um DAG), mas no caso das bibliotecas mutuamente dependentes STATIC o CMake permite que o gráfico contenha ciclos (componentes fortemente ligados). Por exemplo, o código

add_library(A STATIC a.c)add_library(B STATIC b.c)target_link_libraries(A B)target_link_libraries(B A)add_executable(main main.c)target_link_libraries(main A)

links main a A B A B. Enquanto uma repetição é geralmente insuficiente, o arquivo de objetos patológicos e arranjos de símbolos podem requerer mais. Pode-se lidar com tais casos repetindo manualmente o componente na última target_link_libraries chamada. Entretanto, se dois arquivos são tão interdependentes, eles provavelmente devem ser combinados em um único arquivo.

Argumentos para as bibliotecas target_link_libraries podem usar “expressões geradoras” com a sintaxe $<...>. Note, no entanto, que as expressões geradoras não serão usadas no manuseio VELHO de CMP0003 ou CMP0004.Veja o manual cmake-generator-expressions(7) para obter as expressões disponíveis. Veja o manual cmake-buildsystem(7) para mais propriedades de ondefining buildsystem.

.