0Pricing
C++ Academy · Aula

Destinos, ligação e visibilidade: PUBLIC, PRIVATE

Defina destinos, ligue bibliotecas e use corretamente a visibilidade PUBLIC, PRIVATE e INTERFACE

Destinos, ligação e visibilidade: PUBLIC, PRIVATE é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Os Alvos são a Unidade de Compilação

O CMake moderno se baseia em alvos — executáveis, bibliotecas ou conjuntos somente de interface. As propriedades são associadas aos alvos e propagadas por meio da vinculação.

Adicionando Alvos

Use add_executable, add_library ou add_library(... INTERFACE).

add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)

target_link_libraries

Vincula um alvo a bibliotecas. O terceiro argumento controla a visibilidade.

target_link_libraries(myapp PRIVATE mylib)

Visibilidade PUBLIC PRIVATE INTERFACE

Três níveis de visibilidade — eles controlam se as dependências são propagadas para os consumidores deste alvo:

  • PRIVATE — usado para compilar este alvo; não é exposto
  • INTERFACE — usado pelos consumidores; não por este alvo
  • PUBLIC — ambos

Visualizando a Propagação

Se mylib vincula fmt como PUBLIC, qualquer alvo que vincule mylib também recebe os diretórios de inclusão de fmt. PRIVATE significa que os consumidores não veem fmt.

target_include_directories

Defina os diretórios de inclusão por alvo. Use PUBLIC para cabeçalhos que os consumidores incluirão com #include; use PRIVATE para cabeçalhos internos.

target_include_directories(mylib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)

target_compile_definitions

Defina macros do pré-processador para o alvo.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Solicite recursos específicos da linguagem, como um padrão do C++.

target_compile_features(mylib PUBLIC cxx_std_20)

Bibliotecas de Interface

Uma biblioteca INTERFACE não tem saída compilada. Use-a para agrupar opções de compilação, cabeçalhos ou vinculações que os consumidores devem herdar.

add_library(strict_warnings INTERFACE)
target_compile_options(strict_warnings INTERFACE -Wall -Wextra)

# now any target can opt in
target_link_libraries(myapp PRIVATE strict_warnings)

Bibliotecas Somente de Cabeçalhos

Para bibliotecas somente de cabeçalhos, declare uma biblioteca INTERFACE e defina o diretório de inclusão como INTERFACE.

Nomes Alternativos

Crie nomes alternativos com espaços de nomes para tornar os comandos de vinculação mais claros.

add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)

Ordem de Vinculação

O CMake geralmente resolve a ordem de vinculação corretamente. Em casos circulares complexos, use a opção do vinculador --start-group ou reorganize a estrutura das bibliotecas.

Erro Comum: include_directories Global

Evite o comando global include_directories. Use target_include_directories para associar os cabeçalhos somente a alvos específicos.

Verificação Rápida

O que target_link_libraries(mylib PUBLIC fmt) significa para um alvo que vincula mylib?

Recapitulação

O CMake moderno usa alvos como unidade de trabalho. Defina propriedades com comandos target_* e use PUBLIC/PRIVATE/INTERFACE para controlar como as propriedades são propagadas aos consumidores.

Perguntas Frequentes

A aula “Destinos, ligação e visibilidade: PUBLIC, PRIVATE” é grátis?

Sim — o texto completo de “Destinos, ligação e visibilidade: PUBLIC, PRIVATE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Destinos, ligação e visibilidade: PUBLIC, PRIVATE”?

Defina destinos, ligue bibliotecas e use corretamente a visibilidade PUBLIC, PRIVATE e INTERFACE Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Destinos, ligação e visibilidade: PUBLIC, PRIVATE”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Organização de projetos CMake e CMakeLists.txt
  2. Destinos, ligação e visibilidade: PUBLIC, PRIVATE
  3. Usar vcpkg e Conan para dependências
  4. Gerar ficheiros de IDE e compilações multiplataforma
← Voltar para C++ Academy