2016-04-19 72 views
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 
) 
+0

也許在項目'B'的'CMakeLists.txt'中設置'link_directories($ {CMAKE_SOURCE_DIR}/lib)'就足夠了。不確定,嘗試一下,如果解決了,我會將其添加爲答案。 – skypjack

+0

你能告訴我們你的CMake文件的相關部分嗎? – MikeMB

+0

@MikeMB其實這個項目要大得多,並且有很多其他名稱的子目錄。恐怕我會讓它變得更加混亂。現在的問題是編譯項目B而不復制liba1.a和liba2.a。可能嗎? – flipback

回答

0

最好的解決方案中使用OBJECT選項:

add_library(myObjects OBJECT a.c b.c) 
相關問題