CMake - dependências (cabeçalhos) entre aplicativos / bibliotecas no mesmo projeto

Eu tenho a seguinte estrutura de projeto:

CMakeLists.txtlib1 / CMakeLists.txt e todos os arquivos cpp e header do liblib2 / CMakeLists.txt e todos os arquivos cpp e header do libapp / CMakeLists.txt e todos os arquivos de cpp e cabeçalho do aplicativo

O principal CMakeLists.txt se parece com:

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

O lib1 / CMakeLists.txt parece, por exemplo, como (despojado):

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

e aquele para o aplicativo parece o mesmo, exceto de ADD_EXECUTABLE:

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

Eu encontrei a configuração funcionando bem dessa maneira, porque fora disso, eu posso gerar um arquivo de solução do Visual Studio que contém todos esses três projetos. Mas meu problema é que meu aplicativo inclui arquivos de cabeçalho da lib1 (e também da lib2, que depende da lib1). Quando eu faço

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

ele gera o arquivo VS.sln fora da fonte como eu quero, mas o aplicativo não compila porque não pode encontrar os arquivos de cabeçalho da lib1 (obviamente).

Agora eu li e tentei muitas coisas, comoTARGET_LINK_LIBRARIES( app lib1 ) (que tem o aplicativo para vincular com o lib1, mas não resolver o problema de incluir o cabeçalho), e coisas comoadd_subdirectory( ../lib1 ) em várias variantes no CMakeLists.txt do aplicativo (que todos lançaram erros que eu não poderia consertar), e também find_package (que eu acho que é a abordagem errada).

Então, como eu posso resolver isso (eu acho simples ...) problema?

questionAnswers(2)

yourAnswerToTheQuestion