簡體   English   中英

使用cmake鏈接到自編譯的靜態庫

[英]Link with self-compiled static libraries with cmake

我嘗試為項目編寫一些測試。 如果我需要一些項目文件,請編寫include_directories語句,所有文件都將包含在內。 如果需要一些手動編譯的靜態庫,我嘗試設置target_link_libraries

如果我設置絕對路徑,那么所有鏈接都可以,但是對於任務,我需要另一種方式鏈接另一個庫,因為庫的相對路徑提供了未定義的引用。

在這種情況下,一切正常:

target_link_libraries(ConsoleDumperTest GTest::GTest GTest::Main PocoFoundation PocoUtil PocoNet ${YAML_LIBRARIES})
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/protocols/libprotocols.a)
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/consumers/libconsumers.a)
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/consumers/Console/libconsole.a)

但是如果我這樣做:

target_link_libraries(ConsoleDumperTest GTest::GTest GTest::Main PocoFoundation PocoUtil PocoNet ${YAML_LIBRARIES})
target_link_libraries(ConsoleDumperTest ../../../protocols/libprotocols.a)
target_link_libraries(ConsoleDumperTest ../../../consumers/libconsumers.a)
target_link_libraries(ConsoleDumperTest ../../../consumers/Console/libconsole.a)

盡管目錄中包含庫,但我仍收到未定義的引用。 我必須以哪種方式設置鏈接庫的路徑?

根據文檔target_link_libraries不應與相對路徑一起使用:您應該使用絕對路徑或庫

通過了解相對路徑,很容易在CMake中構造絕對路徑。 例如,假設您知道當前源目錄(包含當前執行的CMakeLists.txt的目錄)的相對路徑,請使用CMAKE_CURRENT_SOURCE_DIR變量:

target_link_libraries(ConsoleDumperTest
    ${CMAKE_CURRENT_SOURCE_DIR}/../../../protocols/libprotocols.a
)

CMake的link_directories(...)命令提供以下功能:

link_directories(directory1目錄2 ...)

指定鏈接器應在其中搜索庫的路徑。 該命令僅適用於調用后創建的目標。 賦予此命令的相對路徑被解釋為相對於當前源目錄,請參見CMP0015。

還要注意,如果這些庫的依賴在同一CMake的項目中定義,使用add_library(target_name ...)你可以指定目標名稱,而不是內部的二進制名稱target_link_libraries

暫無
暫無

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

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