簡體   English   中英

用簡單的C ++示例找不到庫

[英]Cannot find library with simple C++ example

我正在使用cmake在Ubuntu中構建一個名為alpha的C ++庫,其中包含一個源文件:

cmake_minimum_required(VERSION 2.8)

project(Alpha)

add_library (alpha alpha.cpp)

這將創建一個名為libalpha.a的文件,現在我想鏈接到該文件。 因此,我將其復制到另一個名為beta C ++項目的源目錄中,該項目還包含一個源文件:

cmake_minimum_required(VERSION 2.8)

project(Beta)

add_executable(beta beta.cpp)

target_link_libraries(beta alpha)

但是,出現以下錯誤:

/usr/bin/ld: cannot find -lalpha

如果使用該行,也會發生相同的事情:

target_link_libraries(beta libalpha.a)

為什么beta無法找到alpha庫?

如果您希望完全分別構建庫和程序,則必須使用導入的target 當您嘗試將可執行文件鏈接到“完全未知”的庫時,CMake構建系統會自動將查找庫的任務傳遞給鏈接器,只需添加-lalpha選項即可。 當鏈接器遇到該選項時,它將嘗試在標准庫位置之一(即/usr/lib//usr/local/lib等)中定位libalpha.so並預期失敗。 您可以使用libalpha.a的絕對路徑: libalpha.a target_link_libraries(beta /path/to/libalpha.a)

但是,如果您可以一起構建事物,則可以大大簡化任務。 考慮

<項目> /CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

Project(Test)

add_subdirectory(alpha)
add_subdirectory(beta)

<項目> /alpha/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)

project(alpha)

set(SOURCES alpha.c)

add_library(alpha ${SOURCES})
target_include_directories(
  alpha INTERFACE
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
)

要自動將libalpha包含目錄添加到所有后來與libalpha鏈接的組件,需要使用target_include_directories()及其復雜的表達式。

<項目> /beta/CMakeLists.txt

project(beta)

set(SOURCES beta.c)

add_executable(beta ${SOURCES})
target_link_libraries(beta alpha)

將此行與alpha-library的路徑一起添加。

link_directories( <library path> )

暫無
暫無

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

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