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 aplicativoO 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?