CMake - зависимости (заголовки) между приложениями / библиотеками в одном проекте

У меня есть следующая структура проекта:

CMakeLists.txt lib1/CMakeLists.txt and all cpp and header files of the lib lib2/CMakeLists.txt and all cpp and header files of the lib app/CMakeLists.txt and all cpp and header files of the app

Основной CMakeLists.txt выглядит так:

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

Lib1 / CMakeLists.txt выглядит, например, как (раздетый):

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

и тот, который для приложения выглядит так же, за исключением ADD_EXECUTABLE:

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

Я обнаружил, что установка хорошо работает таким образом, потому что из этого я могу сгенерировать один файл решения Visual Studio, который содержит все эти три проекта. Но моя проблема в том, что мое приложение содержит заголовочные файлы lib1 (а также lib2, которая зависит от lib1). Когда я делаю

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

он генерирует VS.sln-файл из исходных кодов так, как я хочу, но приложение не компилируется, потому что не может найти заголовочные файлы lib1 (очевидно).

Сейчас я прочитал и перепробовал много вещей, вродеTARGET_LINK_LIBRARIES( app lib1 ) (которое заставило приложение связываться с lib1, но не решило проблему включения заголовка), и тому подобноеadd_subdirectory( ../lib1 ) в различных вариантах в CMakeLists.txt приложения (которое выдает все ошибки, которые я не мог исправить), а также find_package (который, я думаю, является неправильным подходом).

Так, как я могу решить эту (я думаю, простую ...) проблему?

Ответы на вопрос(2)

Ваш ответ на вопрос