首页 > 解决方案 > 使用 CMake 查找本地目录库

问题描述

我有一个名为的项目myproject,带有一个构建目录myhome/myproject/build

我有一个名为的库libmylibrary.somyhome/folder/lib其中包含标题myhome/folder/include

然后我有一个 CMakeLists.txt,myhome/myproject其中看起来像:

cmake_minimum_required(VERSION 3.5.1)                                                                                                                                                                       
project (myproject)
file(GLOB SOURCES "src/*.cpp")
add_executable(myproject ${SOURCES})

find_library(MYLIB mylibrary REQUIRED)
target_link_libraries(myproject PRIVATE mylibrary)

cmake ../在构建目录中运行,然后make,我得到:

/usr/bin/ld: cannot find -lmylibrary
collect2: error: ld returned 1 exit status

我简直不明白这怎么这么难。我错过了什么?我已经尝试过随机但名称极其相似的 CMake 指令的每一种组合,但没有成功(也没有关于成功或失败原因的信息,所以它实际上只是反复试验)。

我如何告诉 [whatever thing need to know] 我的库在哪里,以便 CMake 可以找到它,而无需在 CMake 脚本中对其进行硬编码?谢谢。

谢谢

标签: c++cmake

解决方案


有关库位置的提示 CMake,您可以将CMAKE_LIBRARY_PATH变量设置为包含所需库的目录:

cmake -DCMAKE_LIBRARY_PATH=myhome/folder/lib <other-cmake-arguments>

或者,如果您的库包含在lib/子目录下,您可能会提示带有CMAKE_PREFIX_PATH变量的上层目录:

cmake -DCMAKE_PREFIX_PATH=myhome/folder/lib <other-cmake-arguments>

后一种方式也暗示了其他find_*命令,请参阅我的答案以获取更多信息。


推荐阅读