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 (который, я думаю, является неправильным подходом).
Так, как я могу решить эту (я думаю, простую ...) проблему?