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
- Organização de projetos CMake e CMakeLists.txt
- Destinos, ligação e visibilidade: PUBLIC, PRIVATE
- Usar vcpkg e Conan para dependências
- Gerar ficheiros de IDE e compilações multiplataforma