CMake: dependencias (encabezados) entre aplicaciones / bibliotecas en el mismo proyecto

Tengo la siguiente estructura de proyecto:

CMakeLists.txtlib1 / CMakeLists.txt y todos los archivos de encabezado y cpp de la bibliotecalib2 / CMakeLists.txt y todos los archivos de encabezado y cpp de la bibliotecaapp / CMakeLists.txt y todos los archivos de encabezado y cpp de la aplicación

El principal CMakeLists.txt se ve así:

PROJECT( ${PROJECT_NAME} )
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)

El lib1 / CMakeLists.txt se ve, por ejemplo, como (despojado):

SET(SOURCE
file.cpp
)
SET(HEADERS
    some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )

y el de la aplicación tiene el mismo aspecto, excepto ADD_EXECUTABLE:

SET(SOURCE
main.cpp
)
SET(HEADERS
    some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )

Encontré que la configuración funcionaba bien de esta manera porque, a partir de esto, puedo generar un archivo de solución de Visual Studio que contenga los tres proyectos. Pero mi problema es que mi aplicación incluye archivos de encabezado de lib1 (y también de lib2, que depende de lib1). Cuando lo hago

$mkdir build
$cd build
$cmake -C ..\myproject

genera un archivo VS.sln fuera de la fuente como lo quiero, pero la aplicación no se compila porque no puede encontrar los archivos de encabezado de lib1 (obviamente).

Ahora leí y probé muchas cosas, comoTARGET_LINK_LIBRARIES( app lib1 ) (que hizo que la aplicación se vinculara con la lib1, pero no resolviera el problema de inclusión del encabezado), y cosas comoadd_subdirectory( ../lib1 ) en varias variantes en el CMakeLists.txt de la aplicación (que arrojó todos los errores que no pude corregir), y también find_package (que creo que es el enfoque equivocado).

Entonces, ¿cómo puedo resolver este problema (supongo que simple ...)?

Respuestas a la pregunta(2)

Su respuesta a la pregunta