2009-09-22 14 views
26

Mam dwa projekty, z których oba używają CMake. Teraz chcę włączyć jeden z projektów jako bibliotekę do drugiego, zachowując jednocześnie możliwość kompilowania ich jako samodzielne projekty.Osadzanie jednego projektu cmake w innym?

Do tej pory zrobiłem: Użyj systemu kontroli wersji, aby sklonować kopię projektu podrzędnego w podkatalogu projektu nadrzędnego. Użyłem "add_subdirectory", aby dołączyć CMakeLists.txt projektu podrzędnego do projektu nadrzędnego. Naprawiono też kolizje nazw między celami, zmieniając nazwy niektórych obiektów docelowych w projekcie podrzędnym.

Jednak problem, na który napotykam, polega na tym, że różne testy konfiguracji w projekcie potomnym nie działają. Na przykład projekt potomny korzysta z modułu FindThreads w celu określenia, które prymitywy synchronizacji są dostępne. Projekt macierzysty nie jest świadomy problemów z wątkami i dlatego nie ma żadnych testów związanych z tym zagadnieniem. Podobnie projekt potomny ma różne testy dla nagłówków i takie, które nie są potrzebne w projekcie nadrzędnym. Wydaje się, że żaden z tych testów nie działa, a symbole zdefiniowane w tych testach nie są dodawane do pliku CMakeCache.txt.

Naprawdę nie chcę, aby wszystkie testy z projektu podrzędnego (które dotyczą głównie problemów związanych z platformą, które nie są istotne dla rodzica) zostały przeprowadzone w pliku CMakeLists.txt nadrzędnego projektu.

Odpowiedz

17

CMake 2.8 dodał nowy moduł External Project, który pozwala utworzyć niestandardowy cel do sterowania kompilacją kolejnego projektu CMake. Dokumentacja jest słaba, ale wygląda na to, że może zrobić to, co chcesz.

Myślę, że pomysł polegałby na wywołaniu elementu ExternalProject_Add z projektu nadrzędnego, wskazując go w katalogu źródłowym projektu podrzędnego (można nawet sprawić, że sprawdzi on dla ciebie projekt potomny SVN lub CVS, dobrze!).

+1

Dzięki, ostatnio współpracuję z projektami zewnętrznymi i robią, co chcę. Ponieważ używam podprojektów git, muszę powiedzieć ExternalProject_Add, aby nie pobierał ani nie instalował zewnętrznego projektu - można to zrobić, ustawiając polecenia pobierania i instalacji na "" (pusty ciąg znaków). – Talin

Powiązane problemy