Soy nuevo en CMake y estoy un poco confundido con las palabras clave PUBLIC, PRIVATE e INTERFACE relacionadas con target_link_libraries(). La documentación menciona que se pueden utilizar para especificar tanto las dependencias del enlace como la interfaz del enlace en un solo comando.
¿Qué significan realmente las dependencias de enlace y la interfaz de enlace?

Respuestas:
Si está creando una biblioteca compartida y sus archivos cpp de origen #incluyen los encabezados de otra biblioteca (digamos, QtNetwork por ejemplo), pero sus archivos de encabezado no incluyen encabezados QtNetwork, entonces QtNetwork es una
PRIVATEdependencia.Si sus archivos de origen y sus encabezados incluyen los encabezados de otra biblioteca, entonces es una
PUBLICdependencia.Si sus archivos de encabezado, pero no sus archivos de origen, incluyen los encabezados de otra biblioteca, entonces es una
INTERFACEdependencia.Otras propiedades de compilación
PUBLICyINTERFACEdependencias se propagan a las bibliotecas consumidoras. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirementsfuente
PUBLICoPRIVATEimporta? ¿Qué cambia?PRIVATEno agrega sus dependencias a los proyectos que se vinculan a su biblioteca. Es más limpio y también evita posibles conflictos entre tus dependencias y las de tu usuario.PUBLICdependencia, no unaINTERFACEdependencia.