Por que usar add_library ({tgt} IMPORTED) versus target_link_libraries (-l {.so | .a})?

Qual é o objetivo de usar a declaração:

add_library(<tgt> [SHARED|STATIC] IMPORTED)

Pelo que descobri, mesmo se você criar um destino de biblioteca importado acima, ainda precisará especificar o local específico do arquivo .so ou .a real. Isso levaria pelo menos três comandos cmake para vincular a um executável e o compilador ainda não pesquisaria automaticamente os diretórios de inclusão comuns no seu sistema operacional.

Exemplo:código cmake para vincular lib importado

A partir da documentação do CMake, entendo que existem realmente três maneiras de vincular uma biblioteca que não foi criada como destino em um subprojeto do aplicativo / biblioteca geral.

Documentação do CMake target_link_libraries ()

Usando um pacote CMake para um dos scripts de pacote enviados.

Usando um sinalizador de vinculador:

target_link_libraries(<tgt> [SHARED|STATIC|...] -lncursesw)
Ou usando o método da biblioteca IMPORTED (exibido no código na parte superior).

Uma grande diferença ao usar o segundo método é que ele usa apenas uma única linha de código e pesquisará todos os diretórios de inclusão predefinidos do seu compilador no sistema operacional. Alguém poderia me ajudar a entender por que o método add_library () é usado?

Postagens Realizadas Adicionais de SO:

Incluir diretórios para bibliotecas importadas

Comportamento da biblioteca importada do CMake

questionAnswers(1)

yourAnswerToTheQuestion