簡體   English   中英

在cmake項目中使用靜態庫

[英]using static libraries in cmake project

我有兩個C ++項目A和B。項目B取決於項目A。項目A的結構分為幾個子目錄:

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的定義。 盡管我已經在Project B中將target_link_libraries添加到CMakeLists.txt中,但還​​是出現了這樣的錯誤:

未定義對`project_a :: a1 :: func1()的引用”

UPD1

我通過復制子目錄(liba1.a,liba2.a)中的所有庫並將它們鏈接到項目,成功地編譯了ProjectB。 我想知道是否有可能調整Project 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
)

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

 add_library(myObjects OBJECT a.c b.c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM