Zastanawiam się, jak zarządzać zależnościami zewnętrznego projektu. Powiedzmy, że mam trzy projekty, każdy w innym repozytorium:CMake: zależności od zewnętrznego projektu
- Rdzeń: Biblioteka eksportuje wiele przydatnych rzeczy.
- Lib1: biblioteka z określonymi klasami (w zależności od Core).
- wykonywalny: używa rzeczy z Rdzenia a także z LIB1.
Każdy projekt z jego CMakeLists.txt. Korzystanie find_package i definiowanie ścieżek na CMake mogę zbudować każdy projekt bez problemów i zainstalować go (I następnie this tuto zbudować .cmake plików do biblioteki)
Teraz staram się uczynić ten proces tak proste, jak to możliwe, Wprowadzam makro ExternalProject_Add, w ten sposób ludzie będą musieli tylko sklonować repozytorium Executable i przy pomocy plików CMake Lib1 i Core są również pobierane, kompilowane i łączone.
Problemem jest to, że wykonywalny i LIB1 zależy Rdzenia ale chcę go sklonować (i skompilowane) tylko raz. Tutaj jest problem:
- W wykonywalne CWprowadä klony i buduje Rdzeń z funkcjami ExternalProject_Add.
- Następnie CUpewnij klony LIB1 i szukać Rdzenia ale nie został jeszcze zainstalowany, więc nie ma core-targets.cmake plik (core-config.cmake jest dostępny) i ... budynek nie ...
nie wiem, czy jest udokumentowany sposób pracy z tego rodzaju drzewa projektu lub będę pisać jakieś obejście kiedy Rdzeń jest ujęte jako zależność zewnętrzny profesjonalista w celu uniknięcia użycia pliku core-targets.cmake.
Dzięki!
Rozwiązanie
zdałem sobie sprawę, że podczas korzystania ExternalProject_Add pobiera, buduje i zainstalować projekt tak, to w folderze install-mam już wszystkie pliki potrzebne do kompilacji jego utrzymaniu.
Więc mogę zarządzać ten problem następujące kroki (również na celu kompilacji):
- * ExternalProject_Add * dla Rdzeń
- * ExternalProject_Add * dla LIB1 przechodząc Install_Dir rdzenia jako argument
- ... i Plik wykonywalny.
Widzę dwie alternatywy: (1) utworzyć pojedynczy projekt CMake dla wszystkich bibliotek i plików wykonywalnych; (2) sprawiają, że 'Executable' zależy tylko od' Lib1'. –
(skopiowane jako rozwiązanie) Uświadomiłem sobie, że podczas korzystania z ExternalProject_Add pobiera, buduje i INSTALUJE projekt, więc w folderze instalacji mam już wszystkie pliki potrzebne do skompilowania jego zależności. Więc mogę poradzić sobie z tym problemem, wykonując następujące kroki (również w przypadku zlecenia budowy): * ExternalProject_Add dla Core * ExternalProject_Add dla Lib1 przekazującego Core dir instalacji jako argument. * ..i Plik wykonywalny. (skopiowane w pytaniu) – jgsogo