簡體   English   中英

如何使用 cmake 正確鏈接庫?

[英]How do I link the library correctly using cmake?

我已經在下面列出了我的項目目錄,所以當我做 cmake build 時,我得到了一個我無法弄清楚的鏈接器錯誤。 我收到一個鏈接器錯誤,即 LIBD 無法找到,盡管 LIBB 已成功形成並且 APP 可執行文件只需要 LIBB 為什么它在嘗試構建 APP 時拋出它需要 LIBD 的鏈接器錯誤?

|---CMakeLists.txt <==== add_subdirectory(source) , add_subdirectory(apps)

|---build

|---include
    |---a.h
    |---b.h

|---apps|   
    |---CMakeLists.txt
    |---apps.cpp              1] target_link_libraries(APP PUBLIC LIBB)   <==== linker error 
                                                                                 LIBD not found
  
|---source
|   |---CMakeLists.txt  ===>  1]link_directories(PATH TO LIBD)
                              2]target_link_libraries(LIBA public LIBC) <== successful
                              3]target_link_libraries (LIBB public LIBA LIBD) <== successful

    |---a.cpp
    |---b.cpp

|---lib
|   |---LIBD    <===== static library 

link_directories的范圍限定為包含它的文件,在您的情況下為source/CMakeLists.txt ,因此apps/CMakeLists.txt不知道在哪里可以找到 LIBD。

您應該在主 CMakeLists.txt 中創建一個 IMPORTED CMake 目標,並鏈接到您需要的位置:

add_library(LIBD IMPORTED)
set_target_properties(LIBD PROPERTIES
    IMPORTED_LOCATION lib/LIBD.a)

或者,您可以在apps/CMakeLists.txt重復link_directories語句。

暫無
暫無

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

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