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_LIBRARIES
alvo 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 Headers
diretó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.
.
Deixe uma resposta