0Pricing
C++ Academy · Lección

Destinos, enlazado y visibilidad: PUBLIC, PRIVATE

Defina destinos, enlace bibliotecas y use correctamente la visibilidad PUBLIC, PRIVATE e INTERFACE.

Destinos, enlazado y visibilidad: PUBLIC, PRIVATE es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Los targets son la unidad de compilación

CMake moderno se centra en los targets: ejecutables, bibliotecas o conjuntos que solo proporcionan una interfaz. Las propiedades se asocian a los targets y se propagan mediante el enlace.

Añadir targets

Utilice add_executable, add_library o add_library(... INTERFACE).

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

target_link_libraries

Enlace un target con bibliotecas. El tercer argumento controla la visibilidad.

target_link_libraries(myapp PRIVATE mylib)

Visibilidad PUBLIC PRIVATE INTERFACE

Hay tres niveles de visibilidad; controlan si las dependencias se propagan a los consumidores de este target:

  • PRIVATE — se utiliza para compilar este target; no se expone
  • INTERFACE — lo utilizan los consumidores; no este target
  • PUBLIC — ambas cosas

Visualizar la propagación

Si mylib enlaza fmt como PUBLIC, cualquier target que enlace mylib también recibe los directorios de inclusión de fmt. PRIVATE significa que los consumidores no ven fmt.

target_include_directories

Establezca los directorios de inclusión para cada target. Utilice PUBLIC para los encabezados que los consumidores incluirán con #include; utilice PRIVATE para los encabezados internos.

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

target_compile_definitions

Establezca las macros del preprocesador para el target.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Solicite características específicas del lenguaje, como un estándar de C++.

target_compile_features(mylib PUBLIC cxx_std_20)

Bibliotecas de interfaz

Una biblioteca INTERFACE no genera ningún archivo compilado. Úsela para agrupar opciones de compilación, encabezados o enlaces que los consumidores deban heredar.

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 de solo encabezados

Para las bibliotecas de solo encabezados, declare una biblioteca INTERFACE y establezca el directorio de inclusión como INTERFACE.

Alias

Cree alias con espacio de nombres para que los comandos de enlace sean más claros.

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

Orden de enlace

CMake normalmente resuelve correctamente el orden de enlace. En casos circulares complejos, utilice la opción del enlazador --start-group o reorganice la estructura de las bibliotecas.

Error habitual: include_directories global

Evite el comando global include_directories. Utilice target_include_directories para asociar los encabezados únicamente a targets específicos.

Comprobación rápida

¿Qué significa target_link_libraries(mylib PUBLIC fmt) para un target que enlaza mylib?

Resumen

CMake moderno utiliza los targets como unidad de trabajo. Establezca propiedades con comandos target_* y utilice PUBLIC/PRIVATE/INTERFACE para controlar cómo se propagan las propiedades a los consumidores.

Preguntas frecuentes

¿La lección «Destinos, enlazado y visibilidad: PUBLIC, PRIVATE» es gratis?

Sí — el texto completo de «Destinos, enlazado y visibilidad: PUBLIC, PRIVATE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Destinos, enlazado y visibilidad: PUBLIC, PRIVATE»?

Defina destinos, enlace bibliotecas y use correctamente la visibilidad PUBLIC, PRIVATE e INTERFACE. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Destinos, enlazado y visibilidad: PUBLIC, PRIVATE»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Estructura de proyectos CMake y CMakeLists.txt
  2. Destinos, enlazado y visibilidad: PUBLIC, PRIVATE
  3. Uso de vcpkg y Conan para las dependencias
  4. Generación de archivos para IDE y compilaciones multiplataforma
← Volver a C++ Academy