Ich habe zwei C++ Projekte A und B Projekt B ist abhängig von Projekt A. Projekt A hat diese Struktur aufgeteilt in einige Unterverzeichnisse:A probem mit der Verwendung von statischen Bibliotheken in Cmake Projekt
Project A
|-\inc
| |-a1.h
| |-a2.h
|-\src
|-CMakeLists.txt
|-\subdir_A1
| |-CMakeLists.txt
| |-a1.cpp
|
|-\subdir_A2
|-CMakeLists.txt
|-a2.cpp
Project B
|-\lib
|-a1.h
|-a2.h
|-lib_ProjectA.a
|-\src
|-CMakeLists.txt
|-b.cpp
Das Problem ist, dass Projekt B kann die A-Definitionen des Projekts nicht auflösen. Obwohl ich target_link_libraries
zu CMakeLists.txt in Project B hinzugefügt haben, habe ich einen Fehler wie folgt aus:
undefined reference to `project_a :: a1 :: func1()“
UPD1
Ich konnte Projekt B kompilieren, indem ich alle Bibliotheken aus Unterverzeichnissen (liba1.a, liba2.a) kopierte und sie mit dem Projekt verknüpfte.Ich frage mich, ob es möglich ist, Projekt A zu optimieren, so dass ich nur eins tun kann Datei lib_ProjectA.a
UPD2
Code:
Projekt A
add_library (adapter
adapter.cpp
)
target_link_libraries (adapter PUBLIC
net # From project's A subdirectory
utils # From project's A subdirectory
)
Projekt B
add_library (anthill
functional_block.cpp)
target_link_libraries(anthill
${PROJECT_SOURCE_DIR}/lib/libjsoncpp.a
${PROJECT_SOURCE_DIR}/lib/libadapter.a
${PROJECT_SOURCE_DIR}/lib/libnet.a # Can't compile without it
${PROJECT_SOURCE_DIR}/lib/libutils.a # Can't compile without it
)
Vielleicht ist es ausreichend, 'link_directories ($ {CMAKE_SOURCE_DIR}/lib)' in Ihrer 'CMakeLists.txt' im Projekt' B' zu setzen. Ich bin mir nicht sicher, versuche es und füge es als Antwort hinzu, wenn es sich löst. – skypjack
Können Sie uns bitte die relevanten Teile Ihrer CMake-Dateien zeigen? – MikeMB
@MikeMB Eigentlich ist das Projekt viel größer und hat viele Unterverzeichnisse mit anderen Namen. Ich fürchte, ich mache es nur noch verwirrender. Jetzt besteht das Problem darin, Projekt B zu kompilieren, ohne liba1.a und liba2.a zu kopieren. Ist es möglich? – flipback