CMake - zależności (nagłówki) między aplikacjami / bibliotekami w tym samym projekcie
Mam następującą strukturę projektu:
CMakeLists.txtlib1 / CMakeLists.txt i wszystkie pliki cpp i nagłówka bibliotekilib2 / CMakeLists.txt i wszystkie pliki cpp i nagłówka bibliotekiapp / CMakeLists.txt i wszystkie pliki cpp i nagłówka aplikacjiGłówny plik CMakeLists.txt wygląda tak:
PROJECT( ${PROJECT_NAME} )
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)
Wygląd lib1 / CMakeLists.txt wygląda np. Jak (stripped):
SET(SOURCE
file.cpp
)
SET(HEADERS
some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
a ta dla aplikacji wygląda tak samo, z wyjątkiem ADD_EXECUTABLE:
SET(SOURCE
main.cpp
)
SET(HEADERS
some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )
Uważam, że konfiguracja działa dobrze w ten sposób, ponieważ dzięki temu mogę wygenerować jeden plik rozwiązania Visual Studio zawierający wszystkie te trzy projekty. Ale moim problemem jest to, że moja aplikacja zawiera pliki nagłówkowe lib1 (a także lib2, które zależą od lib1). Kiedy robię
$mkdir build
$cd build
$cmake -C ..\myproject
generuje plik źródłowy VS .sln tak, jak tego chcę, ale aplikacja nie kompiluje się, ponieważ nie może znaleźć plików nagłówkowych lib1 (oczywiście).
Teraz czytam i próbowałem wielu rzeczy, takich jakTARGET_LINK_LIBRARIES( app lib1 )
(co spowodowało, że aplikacja łączy się z lib1, ale nie rozwiązuje problemu z nagłówkiem) i takich rzeczyadd_subdirectory( ../lib1 )
w różnych wariantach w aplikacji CMakeLists.txt (wszystkie rzucone błędy, których nie mogłem naprawić), a także find_package (co chyba jest złym podejściem).
Jak mogę rozwiązać ten problem (chyba prosty ...)?