Mam bardzo podobny problem do jednego described na liście mailingowej cmake, gdzie mamy projekt zależny od wielu bibliotek statycznych (wszystkie zbudowane ze źródła w poszczególnych submodułach, każdy z własnym CMakeLists. txt opisujący proces kompilacji dla każdej biblioteki), który chciałbym połączyć w jedną statyczną bibliotekę do wydania dla konsumentów. Zależności mojej biblioteki mogą ulec zmianie i nie chcę obciążać deweloperów w dalszym ciągu tymi zmianami. Schludnym rozwiązaniem byłoby połączenie wszystkich bibliotek w jedną bibliotekę.Łącząc kilka bibliotek statycznych w jedną przy użyciu CMake
Co ciekawe, polecenie target_link_libraries
nie łączy wszystkich statyki podczas ustawiania celu na mylib
i używania go w ten sposób. .
target_link_libraries(mylib a b c d)
jednak dziwnie, jeśli robię projekt mylib
to moduł podrzędny od projektu wykonywalnego, a tylko połączyć przeciwko mylib
w górnym poziomie wykonywalny CMakeLists.txt biblioteka wydaje się być łączone. To znaczy. mylib ma 27 MB, zamiast 3 MB, gdy ustawiam cel, aby budował tylko mylib
.
Istnieją rozwiązania opisują rozpakowywanie bibliotekami do plików obiektów i rekombinacyjnego (here i here), ale wydaje się znacznie niezgrabne gdy CUpewnij wydaje się w pełni zdolny do automatycznego łączenia z bibliotekami w sposób opisany w powyższym przykładzie. Jest tam magiczne polecenie, którego mi brakuje lub zalecany elegancki sposób tworzenia biblioteki wydań?
Ale co zrobisz z tymi wszystkimi to pliki i katalogi? – Drop
@Drop one są spłaszczone lub ukryte za publicznym interfejsem 'mylib'. Deps powinien być niewidoczny dla użytkowników. – learnvst
Jeśli używasz gcc i nie potrzebujesz, aby twój makefile był niezależny od kompilatora, możesz wypróbować ['--whole-archive'] (http://stackoverflow.com/questions Opcja/805555/ld-linker-question-the-whole-archive-option). –