0
我有兩個C++項目A和B.項目B依賴於項目A. 項目A具有這種結構分割成一些子目錄:在cmake的項目中使用靜態庫一個probem
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
的問題是,項目B無法解析項目的A定義。雖然我在項目B加入target_link_libraries
到的CMakeLists.txt,我有這樣的錯誤:
未定義的參考`project_a :: A1 :: FUNC1()」
UPD1
我設法通過複製來自子目錄(liba1.a,liba2.a)的所有庫並將它們鏈接到項目來編譯項目B.我想知道是否可以調整項目A,以便我可以只使用一個文件lib_ProjectA.a
UPD2
代碼:
項目A
add_library (adapter
adapter.cpp
)
target_link_libraries (adapter PUBLIC
net # From project's A subdirectory
utils # From project's A subdirectory
)
項目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
)
也許在項目'B'的'CMakeLists.txt'中設置'link_directories($ {CMAKE_SOURCE_DIR}/lib)'就足夠了。不確定,嘗試一下,如果解決了,我會將其添加爲答案。 – skypjack
你能告訴我們你的CMake文件的相關部分嗎? – MikeMB
@MikeMB其實這個項目要大得多,並且有很多其他名稱的子目錄。恐怕我會讓它變得更加混亂。現在的問題是編譯項目B而不復制liba1.a和liba2.a。可能嗎? – flipback