用简单的C ++示例找不到库

时间:2014-12-08 11:46:41

标签: c++ cmake ld

我正在使用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库?

2 个答案:

答案 0 :(得分:0)

如果您希望完全单独构建库和程序,则必须使用imported targets。当您尝试将可执行文件与"完全未知的"库,CMake构建系统自动将定位库的任务传递给链接器,只需添加-lalpha选项。当链接器遇到该选项时,它会尝试在其中一个标准库位置(即/usr/lib//usr/local/lib等)中找到libalpha.so,并且预计会失败。您可以使用libalpha.atarget_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的所有组件。

&LT;项目&GT; /beta/CMakeLists.txt

project(beta)

set(SOURCES beta.c)

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

答案 1 :(得分:0)

添加此行以及alpha-library的路径。

link_directories( <library path> )