找不到具有简单C++示例的库

Cannot find library with simple C++ example

本文关键字:C++ 简单 找不到      更新时间:2023-10-16

我正在使用cmake在Ubuntu中构建一个名为alpha的C++库,其中包含一个源文件:

cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_library (alpha alpha.cpp)

这将创建一个名为 libalpha.a 的文件,我现在想要链接到该文件。因此,我将其复制到另一个投影C++的源目录中,称为 beta ,其中还包含一个源文件:

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库?

如果您希望完全分开构建库和程序,则必须使用导入的目标。当您尝试将可执行文件链接到"完全未知"的库时,CMake 生成系统会自动将查找库的任务传递给链接器,只需添加-lalpha选项即可。当链接器遇到该选项时,它会 libalpha.so 尝试在标准库位置之一(即 /usr/lib//usr/local/lib等),并且预期失败。您可以使用 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}>"
)

需要target_include_directories()包含复杂表达式才能自动将 libalpha 包含目录添加到所有组件中,这些组件稍后将链接到 libalpha。

/beta/CMakeLists.txt

project(beta)
set(SOURCES beta.c)
add_executable(beta ${SOURCES})
target_link_libraries(beta alpha)

将此行与 alpha 库的路径添加。

link_directories( <library path> )